sed行編輯器與vim編輯器

一、sed行編輯器

  1、簡介:sed的本身也是一個管道命令,可以分析標準輸入,還可以將數據進行替換、刪除、新增、選取特定行的功能

  2、工作原理:sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”( pattern space),接著用sed命令處理緩沖區中的內容 ,處理完成后,把緩沖區的內容送往屏幕。接著處理下一 行,這樣不斷重復,直到文件末尾。文件內容并沒有改變 ,除非你使用重定向存儲輸出。Sed主要用來自動編輯一 個或多個文件,簡化對文件的反復操作,編寫轉換程序。

1.png

  3、用法: sed [option]… 'script' inputfile…

常用選項:

    -n:不輸出模式空間內容的自動打印

    -e: 多點編輯

    -f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本

    -r: 支持使用擴展正則表達式

    -i: 原處編輯

  4、地址定界:

  (1) 不給地址:對全文進行處理

  (2) 單地址:

        #: 指定的行

        /pattern/:被此處模式所能夠匹配到的每一行

  (3) 地址范圍:

        #,#

        #,+#

        /pat1/,/pat2/

        #,/pat1/

  (4) ~:步進

        1~2 奇數行

        2~2 偶數行

  5、編輯命令:

        d: 刪除模式空間匹配的行

        p: 顯示模式空間中的內容

        a \text:在行后面追加文本;支持使用\n實現多行追加

        i \text:在行前面插入文本;支持使用\n實現多行插入

        c \text:替換行為單行或多行文本

        w /path/to/somefile: 保存模式匹配的行至指定文件

        r /path/from/somefile:讀取指定文件的文本至模式空 間中匹配到的行后

        =: 為模式空間中的行打印行號

        !:模式空間中匹配行取反處理

綜合示例

2.png

  在這里我創建了一個有10行的文件,用sed結合刪除命令與地址范圍刪除了2-5行,但是如果刪除第2行到最后1行怎么辦。

我們可以這樣

3.png

那如何在文本中的行后追加或插入內容

追加

4.png

6、查找替換功能

  s///:查找替換,支持使用其它分隔符,s@@@,s###

  使用方法sed ‘s/要被替換的字符串/新的字符串/g’

  替換標記:

    g: 行內全局替換 (全局替換就是一整行所有的指定字符串都替換)

  如:

    在這里要注意的是我們替換的是222所以222為一組替換為111最后只剩下22并不能成為一組。

5.png

    p: 顯示替換成功的行

    w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

7、高級編輯命令:

        h: 把模式空間中的內容覆蓋至保持空間中

        H:把模式空間中的內容追加至保持空間中

        g: 從保持空間取出數據覆蓋至模式空間

        G:從保持空間取出內容追加至模式空間

        x: 把模式空間中的內容與保持空間中的內容進行互換

        n: 讀取匹配到的行的下一行覆蓋至模式空間

        N:追加匹配到的行的下一行至模式空間

        d: 刪除模式空間中的行

        D:刪除當前模式空間開端至\n的內容(不在傳至標準輸 出),放棄之后的命令,但是對剩余模式空間重新執行sed

二、vim編輯器

1、簡介

vim可以看做是vi的增強版,它大體上有三種模式,分別是命令模式、編輯模式、擴展命令模式。

  • 命令模式:直接以vim打開一個文件默認情況下進入的模式就是命令模式,在這個模式中可以用上下左右來移動光標,或者執行刪除復制粘貼等命令。

  • 編輯模式:在這個模式下,就可以編輯文件的具體內容,但是需要按下一些特殊按鍵才可以進入這個模式。

  • 擴展命令模式:在最下面一行可以輸入命令進行許多操作。

以上三個模式的關系如下圖。

blob.png

示例,創建一個叫zzzz.txt的文件內容為ABC保存并退出

blob.png

創建文件進入命令模式按a進入編輯模式輸入ABC按ESC退出編輯模式按:進入擴展命令模式輸入wq(保存并退出)。

blob.png

  • 除了上面簡單的幾個小命令vim還有大量的命令與快捷鍵,那就讓我們看一下下面的一張表把。

移動光標
h ← 光標向左移動一個字符
j ↓ 光標向下移動一個字符
k ↑ 光標向上移動一個字符
l → 光標向右移動一個字符
如果想多次移動只需要在前面加上數字如想要向左移動10個字符就在鍵盤上輸入10在按h
Ctrl+f 屏幕向下移動一頁(相當Pg Up)
Ctrl+b 屏幕向上移動一頁(相當Pg Dn)
Ctrl+d 屏幕向下移動半頁
Ctrl+u 屏幕向上移動半頁
+ 光標移動到非空格符的下一行
光標移動到非空格符的上一行
N[space] 如10[space]光標回向后移動20個字符距離
0或[home] 移動到這一行的最前面字符處
$或[end] 移動到這一行的結尾處
H 移動到頁首的第一個字符處
M 移動到頁中的第一個字符處
L 移動到頁尾的第一個字符處
G 移動到這個文件的最后一行
nG 移動到這個文件的第n行
gg 移動到這個文件的第一行
N[Enter] 向下移動n行

(:光標移動至所在處上一句
):光標移動至所在處下一句
{
}
{:光標移動至所在處上一段
}:光標移動至所在處下一段
查找與替換
/word 向下尋找名稱為word的字符串
?word 向上尋找名稱為word的字符串
n 重復前一個查找操作
N 反向進行前一個查找操作
刪除、復制、粘貼
x,X x向后刪除一個字符X向前刪除一個字符
nx 連續向后刪除n個字符
dd 刪除光標所在的一行
ndd 光標所在行向下刪除n行
d1G 刪除光標所在第一行的數據
dG 刪除光標處到最后一行的所有數據
d$ 刪除光標處到該行的最后一個字符
d0 刪除光標處到該行最前面的字符
yy 復制光標所在的一行
nyy 復制光標所在向下的n行
y1g 復制光標所在行到第一行的所有數據
yG 復制光標所在行到最后一行的所有數據
y0 復制光標所在的那個字符到該行行首的所有數據
y$ 復制光標所在的那個字符到該行行尾的所有數據
p.P p將以復制的數據在光標下一行粘貼,P將以復制的數據在光標上一行粘貼
J 將光標所在行與下一行的數據結合成同一行
c 重復刪除多個數據
u 復原前一個操作
Ctrl+r 重做上一個操作
. 重復前一個操作
進入編輯模式
I,i I:從目前光標所在處插入I:從目前所在行的第一個非空格符進行插入。
A,a a:從目前光標所在的下一個字符插入A:從光標所在行的最后一個字付出開始插入
O,o o:從目前光標所在的下一行處插入新的一行O:在目前光標所在處的上一行插入新的一行
R,r r:指揮替換光標所在的那一個字符一次R:一直替換光標所在的文字,直到按下ESC鍵為止
ESC 退出編輯模式
保存、離開等命令
:w 將編輯的數據寫入文件中
:w! 強制寫入到文件中
:q 離開vim
:q! 強制離開不保存
:wq 保存并退出
ZZ 保存并退出
ZQ 不保存退出
:w[name] 將修改過的數據保存到另一個文件中(另存為)
:r[name] 在編輯的數據中,讀入另一個文件
:n1,n2w[name] 將n1n2文件保存成name這個文件
:!command 暫時離開vim執行命令
:set nu 顯示行號
:set nonu 取消行號
多文件編輯按鍵
:n 編輯下一個文件
:N 編輯上一個文件
:files 列出目前這個vim打開的所有文件

怎么樣vim快捷鍵與小命令是不是超級多所以我們需要大量的練習來熟練他,下面我們就來里聯系一個實例:

    1、復制etc下的passwd文件到testdir下改名為xx。

    blob.png

    2、使用vim命令打開它。

    blob.png

    3、在vim中設置一下行號。

    blob.png

    4、光標移動到第5行,向右移動10個字符。

    輸入5按下g再輸入10按下→

     blob.png

     5、將1到20行的nologin改為bash。

    輸入: 在命令行模式下輸入 1,15s\nologin\bash\

    blob.png

     6、修改完后復原。

      直接按U

    blob.png

     7、復制5-10行的內容粘貼到最底下。

    按5G光標會跳至到第5行再按下5y會顯示復制5行按下G跳至文件尾按下p粘貼

    blob.png

     blob.png

     blob.png

     8、將文件另存為一個叫hhl的文件。

     輸入:在命令行模式下輸入w hhl

    blob.png

     9、在第一行新增一行,內容為,I am superman。

    先輸入1G去到第一行,按下大寫O新增一行且再插入模式下,輸入I am superman

    blob.png

    blob.png

    10、保存并退出

    按下esc退出編輯模式按下:進入命令行模式輸入wq按下回車。

    blob.png

vim是vi的加強版所以在vim上面有什么新添加的功能呢,以下列出。

2、vim新的特性

1、著色顯示

  • 對系統規劃的配置文件進行語法檢驗,對特殊內容進行著色。

  • 最下面一行的左邊顯示文件的屬性。

  • 最下面右邊表示光標所在的行與字符數。

如:

blob.png

2、塊選擇功能

在工作環境經中,我們有的時候可能需要提取出一個文件中的一列那塊選擇功能就能很好的幫助我們了。


塊選擇按鍵
v 字符選擇,會將光標經過的地方選擇
V 行選擇,或將光標經過的行選擇
Ctrl+v 塊選擇,用長方形的方式選擇數據
y 將選擇塊復制
d 將選擇的塊刪除

如果我們只需要該文件種bbbbbb的那一列該怎么辦。

blob.png

將光標移到最上行第一個b上然后按下Ctrl+v,左下角出現塊示意圖,然后將光標移至最底部此時光標經過的區域會反白,意為被選擇。

blob.png

這是進行復制粘貼就可以取出來了。

3、多窗口功能

假如有一個文件特別大,我們需要同事看文件的兩個部分那么多窗口功能就可以幫助我們解決這個問題

多文件分割
Vim-o|-O 1 2 打開兩個文件顯示在兩個窗口
o:水平分割O:垂直分割
Ctrl+w,j
Ctrl+w,↓
按住ctrl+w松開后按j或向下移動到向下的窗口
Ctrl+w,k
Ctrl+w+,↑
按住ctrl+w松開后按k或向上移動到向上的窗口
單文件分割
Ctrl+w,s 水平分割
Ctrl+w,v 垂直分割
Ctrl+w,q 取消相鄰窗口
Ctrl+w,o 取消全部窗口
:wqall 退出


blob.png

4、定制vim的工作特性

配置文件:永久有效

    全局:/etc/vimrc

    個人:~/.vimrc

擴展模式:當前vim進程有效

(1) 行號

    顯示:set number, 簡寫為set nu

    取消顯示:set nonumber, 簡寫為set nonu

(2) 括號成對匹配

    匹配:set showmatch, 簡寫為set sm

    取消:set nosm

(3) 自動縮進 啟用:set ai 禁用:set noai

(4) 高亮搜索 啟用:set hlsearch 禁用:set nohlsearch

(5) 語法高亮 啟用:syntax on 禁用:syntax off ?

(6) 忽略字符的大小寫 啟用:set ic 不忽略:set noic

(7) 文件格式

    啟用:fileformat=unix

    不忽略: fileformat=dos

(8) 設置文本寬度

    :set textwidth=65 (vim only)

    :set wrapmargin=15

    :help option-list

    :set or :set all

5、寄存器

  • 有26個命名寄存器和1個無命名寄存器,常存放不同的剪貼版內容,可以不同會話間共享。

  • 用a,b,…,z表示,用“寄存器表示,放在數字和命令之間 

  如:3"tyy 表示復制3行到t寄存器中 

     "tp 表示將t寄存器內容粘貼

  • 未指定,將使用無命名寄存器

  • 有10個數字寄存器,用0,1,…,9表示,0存放最近復 制內容,1存放最近刪除內容。當新的文本變更和刪除 時,1轉存到2,2轉存到3,以此類推。數字寄存器不能 在不同會話間共享。 vim的寄存器

6、編輯二進制文件

  • ? 以二進制方式打開文件 vim –b binaryfile

  • ? 擴展命令模式下,利用xxd命令轉換為可讀的十六進制 :%!xxd

  • ? 編輯二進制文件

  • ? 擴展命令模式下,利用xxd命令轉換回二進制 :%!xxd –r

  • ? 保存退出


原創文章,作者:502795641,如若轉載,請注明出處:http://www.www58058.com/32721

(0)
502795641502795641
上一篇 2016-08-11
下一篇 2016-08-11

相關推薦

  • 數組詳解

    數組 變量:存儲單個元素的內存空間 數組:存儲多個元素的連續的內存空間,相當于多個變量的集合          數組名:整個數組只有一個名字     數組索引:編號從0開始,屬于數值索引     &n…

    Linux干貨 2016-08-24
  • 自制Linux

    1. 分區出來兩個區 fdisk /dev/sdb     2. 創建文件系統   [root@localhost ~]# mkfs.ext4 /dev/sdb1  [root@localhost ~]# mkfs.ext4 /dev/sdb2 3.…

    Linux干貨 2016-09-16
  • 網絡管理之nmcli命令的使用

    nmcli命令      地址配置工具:nmcli nmcli[ OPTIONS ] OBJECT { COMMAND | help }     device -show and manage network interfaces     …

    Linux干貨 2016-09-19
  • 馬哥教育21期網絡班—第8周課程+練習—-成長進行時–不退步

    1、請描述網橋、集線器、二層交換機、三層交換機、路由器的功能、使用場景與區別。 網橋:一種網路裝置,負責網路橋接,將網絡的多個網段在數據鏈路層連接起來。 集線器:將多條以太網線或光纖集合連接在同一段物理介質下的裝置。工作在物理層。 二層交換機:工作在數據鏈路層,交換機內部的CPU會在每個端口成功連接時,通過將MAC地址和端口對應,形成一張MAC表。在今后的通…

    Linux干貨 2016-08-24
  • ?iptables簡單介紹

    iptables簡單介紹 什么是防火墻? 防火墻是工作在主機或網絡邊緣,能夠對其所匹配到的報文根據事先定義好的規則作出相應處理的組件,可以是軟件,也可以是硬件,還能軟硬結合實現。 UNIX/Linux中對防火墻的實現 早期在openBSD中通過內核中的ipfw實現簡單的數據報過濾功能、后來在Linux 2.2內核中使用ipchains來取代,意為鏈、后來在L…

    Linux干貨 2016-03-31
  • nginx AIO機制與sendfile機制

    nginx AIO機制與sendfile機制 從0.8.11版本開始, nginx 開始支持Linux native aio,如何在nginx里配置使用這套機制是本文介紹的重點。在下面的示例配置中,幾個重要相關選項的具體含義如下: aio: Syntax: aio on | off | sendfi…

    Linux干貨 2016-10-27
欧美性久久久久