文本處理三劍客:
第一劍:grep、egrep、fgrep 文本搜索工具
第二劍:sed 全稱Strema Editor,一種強大的文本編輯器
第三劍:Awk 文本格式化工具,文本報告生成器
本文主要描述第二劍:sed 文本編輯器
Sed是對文件內容進行逐行處理,一行一行的進行。它處理的並不是原數據,而是將目標文件複製以後在處理。
Sed用法:sed [OPTION]... {script-only-if-no-other-script} [input-file]...
script:來指明對文本進行什麼樣的操作(地址定界+編輯命令)
Sed常用選項:
-n:不輸出模式空間中的內容到屏幕上(模式空間:sed工作的地方,對文本進行處理、加工)
(如果配合d命令,則不會顯示任何內容。如果配合p命令,則只顯示匹配到的內容)
-e:在一個sed中可以編輯多個腳本(運行多個命令)
-f:每行編輯一個命令/PATH/TO/SED_SCRIPT_FILE
-r:支持使用擴展正則表達式
-i:直接編輯原文件
地址定界:
(1)空地址(不指明文本中的某一行):對全文進行處理
(2)單地址(指定一個數字):
#:明確文本中的第幾行
/PATTERN/:顯示每一行中有此模式的行
(3)地址範圍(起始,結束):中間用逗號隔開
#,#:從第幾行到第幾行
#,+#:顯示從#行開始,在顯示+#行。
例如:“3,+8” 意思是從第三行開始,再往下顯示八行(總共顯示了9行)
#,/part/:顯示從指定的#行開始直到第一次被模式所匹配到的之間的行
/partten1/,/partten2/:顯示第一次被模式匹配和第二次被模式匹配之間的行
(4)步進:
1~2:顯示所有的奇數行
2~2:顯示所有的偶數行
編輯命令:
d:刪除指定的行
例:把wxpp文件中的第2-5行刪除掉
p:指定的行顯示2次
例:把wxpp文件中奇數行顯示2次
a: 在匹配到的行下方追加文本(模式:\text);多行追加(\text\ntext)
例:在wxpp文件中的第三行追加2行“wtc xi huan wxpp”“wxpp xi huan wtc”
如果想全文都追加“wtc xi huan wxpp”,把命令中的地址定界“3”刪除掉即可,如下圖
i:在匹配到的行上方插入本文(模式:\text)
例:在wxpp文件中的第3行插入“wtc xi huan wxpp”
c:把匹配到的行替換爲指定的文本(模式:\text)(注意:整行替換)
例:把wxpp文件中第2-5行換成“wxpp xi huan wtc”
注意:把2-5行換成“wxpp xi huan wtc”是把2-5行看成一個整體,替換爲“wxpp xi huan wtc”
w:把模式空間中的內容保存在指定的文件中
例:把/etc/stab中以UUID的開頭的行保存知道/tmp/wtc中
r:把指定文件的內容加入到匹配模式行的後面(文件合併,把一個文件中的內容穿插到另一個文件中)
例:把wtc中的內容穿插到wxpp中的第四行後面
=:把匹配到的行前面加上行數
例:給fstab中以UUID開頭的行註明是第幾行
!:條件取反(寫在模式後面)
例:刪除fstab下面以非#開頭的行
s///:查找替換。其分隔符可以自行制定,常用的有s@@@、s###等。
例:刪除fstab文件中以#號開頭的行。(把#號替換成什麼都沒有)