1. 程式人生 > >vim末行模式與sed命令

vim末行模式與sed命令

sed vim linux 文本替換

一、在vim中進入末行模式進行查找和替換:

在編輯模式中按/或?進行模式查找

格式:/pattern

可以使用N或n查找上一個或下一個


末行命令中的s命令,是進行替換的命令,先查找再根據模式進行替換

格式:

:[address]s/PATTERN/STRING/CONTROL 斜線的分隔符可以用任意字符


[address]:地址定界符

1.如果省略,則表示光標所在行

2.# 該數字所代表的行號的一行、

3.$ 當前文檔的最後一行;$-1,倒數第二行

4.m,n:m和n都表示數字,其含義為從第m行到第n行

5.m,+n

6./PATTERN/:被PATTERN匹配到的行

7./PATTERN1/,/PATTERN2/:從PATTERN1到PATTERN2的行

8.%:所有行


PATTERN:用於替換的字符串

STRING:替換後的字符串

CONTROL:

g:當前行內所有匹配的字符全部替換


例:

:s/asd/123/ 替換當前行第一個asd為123

:%s/asd/123/ 替換所有行第一個asd為123

:%s/asd/123/g 替換所有行所有asd為123

:/qwe/s/asd/123/ 替換第一個包含qwe的行中的第一個asd為123

:g/qwe/s/asd/123/ 替換所有包含qwe的行中的第一個asd為123


二、sed命令

在實施文本文件處理時,是以行為單位對一個或多個文件進行編輯處理

sed處理文件時,將開啟一塊臨時內存緩沖區,稱為"模式空間",將每一行按順序依次放入模式空間進行處理。對於在模式空間內緩存的行

格式:sed [options] 'script' [file]

默認情況下,sed所處理的文件內容都是在內存中完成的,並不會影響磁盤上存放的文件的內容

-n:對於不能被PATTERN匹配的行,不發往標準輸出

-e script:使用多個script條件編輯,命令的執行順序對結果有影響

-f sript-file:用指定的script-file中讀取腳本內容再編輯

-i 直接編輯源文件

-r 可以使sed支持擴展正則表達式


script:Addresses+Command

Addresses:地址定界符

1.空地址:表示對指定文件的所有行進行編輯處理

2.單地址:sed對於能夠匹配該地址的唯一一行進行處理:

NUMBER:表示指定行號

/PATTERN/:指定被PATTERN匹配的所有行

$:表示最後一行,不支持$-1

3.地址範圍:

addr1,addr2 都表示行號,從addr1到addr2結束的所有行,包括addr1和addr2

fisrt~step first和step都數字,從first行開始,以step為步長經過的所有行

addr1,+N 一共N+1行

addr1,~N 從addr1行開始,向後查找addr1*N行,包括add1行

4./PATTERN1/,/PATTERN2/ 從被PATTERN1匹配的行開始到被PATTERN2匹配的行結束


Command:

= 顯示被PATTERN匹配的行號

a \text 在被模式匹配的行之後追加text的字符;支持用\n換行,從而實現追加多行信息

i \text 之前追加text的字符

c \text 修改為text的字符

d 在模式空間中刪除被模式匹配的行

註意:一般在使用d命令時,不建議使用-n選項

p 將模式空間中匹配的行發送到標準輸出

註意:一般在使用p命令時,建議使用-n選項

w filename 可以是絕對路徑也可以是相對路徑,w命令將模式空間中被PATTERN匹配的行,存儲到指定的文件中

註意:建議使用-n選項

r filename 將匹配到的行加到指定文件後面


!Command:沒有被PATTERN匹配到的行會執行此命令


s///:查找並替換,分隔符可以隨意更換

s/regexp/replacement/[control]

regexp:正則表達式,PATTERN

replacement:替換的內容,純字符串

支持後向引用

s/\(string\)/&/

s/\(string\)/\1/


示例:

sed -n /asd/p file 查找file中被asd匹配的行並輸出到標準輸出

sed -i /asd/s/[[:digit:]]/a/ file 將file中所有被asd匹配行的數字都替換成a並寫入到文件內

sed -i '$a 123' file 在文件最後添加一行123


高級編輯命令:

sed命令會將一些操作後的結果放在另一個緩沖區來進行一些復雜操作,該緩沖區稱為保持空間


h:將模式空間中的內容存儲到保持空間中,並覆蓋保持空間中原有內容;

H:將模式空間中的內容存儲到保持空間中,並追加至原有內容之後;

g:從保持空間取出數據存儲到模式空間中,並覆蓋模式空間的原有內容;

G:從保持空間取出數據存儲到模式空間中,並追加至原有內容之後;

x:將模式空間中的內容與保持空間中的內容交換;

n:讀取被PATTERN匹配到的行的下一行,覆蓋到模式空間;

N:讀取被PATTERN匹配到的行的下一行,追加到模式空間;

D:刪除模式空間中的所有行;


如:

sed -n 'n;p' FILE 輸出偶數行

sed '1!G;h;$!d' FILE 倒序輸出

sed '$!N;$!D' FILE 輸出最後兩行

sed '$!d' FILE 輸出最後一行

sed 'G' FILE 在每一行後加入空白行輸出

sed 'g' FILE 輸出文件總行數的空白行

sed '/^$/d;G' FILE 在每一行後加入空白行輸出,如果本身為一個或多個空白行則合並為一行

sed 'n;d' FILE 刪除偶數行

sed -n '1!G;h;$p' FILE 倒序輸出


vim末行模式與sed命令