vim末行模式與sed命令
在編輯模式中按/或?進行模式查找
格式:/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命令