sed:(Stream Editor)流編輯器。它是行編輯器,處理純ASCII碼文本,實作逐行進行處理文本。
sed編輯特性
它并不直接處理文本檔案本身,處理檔案時逐行讀取,把符合模式條件的行讀取到記憶體空間中,而後在記憶體中完成編輯,并且把編輯的結果輸出到螢幕上。記憶體空間又稱為模式空間。處理文本是做模式過濾,符合模式條件文本進行處理,不符合的不予處理。sed還有一種叫保留白間,屬于進階功能。
sed預設不編輯原檔案,僅對模式空間中的資料做處理,處理完成後,将模式空間中的内容列印至螢幕
(全屏編輯器:vi)
sed文法格式
sed [options] 'AddressCommand' file1 file2 ...
注意:位址和編輯指令之間不需要加空格
選項:
-n:靜默模式,隻把經過sed指令處理的行輸出到螢幕
-i: 将修改直接寫入原檔案,而不是輸出到螢幕
-e SCRIPT -e SCRIPT:可以同時執行多個腳本(sed的位址和編輯指令稱為腳本)
-f 腳本檔案名: 從sed腳本中讀入sed操作
-r: 表示使用擴充正規表達式
位址(Address)界定表示方法
- StartLine,EndLine 起始行和結束行用逗号隔開,
例:1,100表示從第一行到第100行
$ :表示最後一行
$-1:表示倒數第二行
- /RegExp/ 使用正規表達式來指定模式,用雙斜杠将模式包含在内,這裡的模式就是正規表達式。
例:/^root/ 比對所處理檔案中所有以root開頭的行
-
/pattern1/,/pattern2/ 模式1,模式2
這種方式表示從第一次被模式1比對的行開始,至第一次由模式2比對的行結束,這中間的所有行
- LineNumber 指定行号,精确比對某行
-
StartLine,+N
從startline開始,向後的N行。
指令(Command)
d: 删除符合條件的行
p: 顯示符合條件的行
a \string: 在指定的行後面追加新行,内容為“string(字元串)”,字元串中間如果有空格,需要用雙引号包含
\n: 可以用于換行
i \string: 在指定的行前面添加新行,内容為string
r FILE(檔案名): 将指定的檔案的内容添加至符合條件的行處
例:sed '3r /etc/issue' /etc/fstab
w FILE(檔案名):将指定範圍内的内容另存至指定的檔案中
例:sed '/^#/w a.txt' anaconda-ks.cfg
s/pattern/string/: 查找并替換,預設隻替換每行中第一次被模式比對到的字元串,格式:“行範圍s/舊字元/新字元/”
加修飾符:
s/pattern/string/修飾符:
修飾符
g:全局替換
i: 查找時忽略字元大小寫
例:df -h | sed 's/\//#/g'
//将全文的"/"替換為“#”
注:s指令後的分割符不僅限于“/”,可以換為3個#号或3個@符号,隻要是3個同樣的符号即可
例:[root@cgy12 ~]# df -h | sed 's$/$#$g'
Filesystem Size Used Avail Use% Mounted on
#dev#sda3 8.7G 3.8G 4.5G 47% #
tmpfs 295M 0 295M 0% #dev#shm
#dev#sda1 194M 34M 151M 19% #boot
後項引用
\{\},\1,\2
&:引用模式比對到的整個字元串
l..e : like-->liker
love-->lover
例:[root@cgy15 ~]# sed 's/l..e/&r/' test.txt
hello liker
hello lover
//比對以l開頭,e結尾,中間任意兩個字元的字元串;将比對到的字元串後面加上r
或者還可以這樣:
例:[root@cgy15 ~]# sed 's%\(l..e\)%\1r%' test.txt
hello liker
hello lover
将做如下修改:
like-->Like
love-->Love
例:[root@cgy15 ~]# sed 's#l\(..e\)#L\1#' test.txt
hello Like
hello Love
tr指令的用法
[root@cgy15 ~]# tr --help
用法:tr [選項]... SET1 [SET2]
從标準輸入中替換、縮減和/或删除字元,并将結果寫到标準輸出。
-c, -C, --complement 首先補足SET1
-d, --delete 删除比對SET1 的内容,并不作替換
-s, --squeeze-repeats 如果比對于SET1 的字元在輸入序列中存在連續的
重複,在替換時會被統一縮為一個字元的長度
-t, --truncate-set1 先将SET1 的長度截為和SET2 相等
--help 顯示此幫助資訊并退出
--version 顯示版本資訊并退出
SET 是一組字元串,一般都可按照字面含義了解。解析序列如下:
\NNN 八進制值為NNN 的字元(1 至3 個數位)
\\ 反斜杠
\a 終端鳴響
\b 倒退
\f 換頁
\n 換行
\r 回車
\t 水準制表符
\v 垂直制表符
字元1-字元2 從字元1 到字元2 的升序遞增過程中經曆的所有字元
[字元*] 在SET2 中适用,指定字元會被連續複制直到吻合設定1 的長度
[字元*次數] 對字元執行指定次數的複制,若次數以 0 開頭則被視為八進制數
[:alnum:] 所有的字母和數字
[:alpha:] 所有的字母
[:blank:] 所有呈水準排列的空白字元
[:cntrl:] 所有的控制字元
[:digit:] 所有的數字
[:graph:] 所有的可列印字元,不包括空格
[:lower:] 所有的小寫字母
[:print:] 所有的可列印字元,包括空格
[:punct:] 所有的标點字元
[:space:] 所有呈水準或垂直排列的空白字元
[:upper:] 所有的大寫字母
[:xdigit:] 所有的十六進制數
[=字元=] 所有和指定字元相等的字元