sed:(Stream Editor)流編輯器肋层。它是行編輯器亿笤,處理純ASCII碼文本,實現(xiàn)逐行進行處理文本槽驶。
sed編輯特性
它并不直接處理文本文件本身责嚷,處理文件時逐行讀取鸳兽,把符合模式條件的行讀取到內(nèi)存空間中掂铐,而后在內(nèi)存中完成編輯,并且把編輯的結(jié)果輸出到屏幕上揍异。內(nèi)存空間又稱為模式空間全陨。處理文本是做模式過濾,符合模式條件文本進行處理衷掷,不符合的不予處理辱姨。sed還有一種叫保留空間,屬于高級功能戚嗅。
sed默認不編輯原文件雨涛,僅對模式空間中的數(shù)據(jù)做處理,處理完成后懦胞,將模式空間中的內(nèi)容打印至屏幕
(全屏編輯器:vi)
sed語法格式
sed [options] 'AddressCommand' file1 file2 ...
注意:地址和編輯命令之間不需要加空格
選項:
-n:靜默模式替久,只把經(jīng)過sed命令處理的行輸出到屏幕
-i: 將修改直接寫入原文件,而不是輸出到屏幕
-e SCRIPT -e SCRIPT:可以同時執(zhí)行多個腳本(sed的地址和編輯命令稱為腳本)
-f 腳本文件名: 從sed腳本中讀入sed操作
-r: 表示使用擴展正則表達式
地址(Address)界定表示方法
- StartLine,EndLine 起始行和結(jié)束行用逗號隔開躏尉,
例:1蚯根,100表示從第一行到第100行
$ :表示最后一行
$-1:表示倒數(shù)第二行
- /RegExp/ 使用正則表達式來指定模式,用雙斜杠將模式包含在內(nèi)胀糜,這里的模式就是正則表達式颅拦。
例:/^root/ 匹配所處理文件中所有以root開頭的行
/pattern1/,/pattern2/ 模式1蒂誉,模式2
這種方式表示從第一次被模式1匹配的行開始,至第一次由模式2匹配的行結(jié)束距帅,這中間的所有行LineNumber 指定行號右锨,精確匹配某行
StartLine,+N
從startline開始碌秸,向后的N行陡蝇。
命令(Command)
d: 刪除符合條件的行
p: 顯示符合條件的行
a \string: 在指定的行后面追加新行,內(nèi)容為“string(字符串)”哮肚,字符串中間如果有空格登夫,需要用雙引號包含
\n: 可以用于換行
i \string: 在指定的行前面添加新行,內(nèi)容為string
r FILE(文件名): 將指定的文件的內(nèi)容添加至符合條件的行處
例:sed '3r /etc/issue' /etc/fstab
w FILE(文件名):將指定范圍內(nèi)的內(nèi)容另存至指定的文件中
例: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結(jié)尾涣楷,中間任意兩個字符的字符串;將匹配到的字符串后面加上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]
從標準輸入中替換抗碰、縮減和/或刪除字符狮斗,并將結(jié)果寫到標準輸出。
-c, -C, --complement 首先補足SET1
-d, --delete 刪除匹配SET1 的內(nèi)容弧蝇,并不作替換
-s, --squeeze-repeats 如果匹配于SET1 的字符在輸入序列中存在連續(xù)的
重復碳褒,在替換時會被統(tǒng)一縮為一個字符的長度
-t, --truncate-set1 先將SET1 的長度截為和SET2 相等
--help 顯示此幫助信息并退出
--version 顯示版本信息并退出
SET 是一組字符串,一般都可按照字面含義理解看疗。解析序列如下:
\NNN 八進制值為NNN 的字符(1 至3 個數(shù)位)
\\ 反斜杠
\a 終端鳴響
\b 退格
\f 換頁
\n 換行
\r 回車
\t 水平制表符
\v 垂直制表符
字符1-字符2 從字符1 到字符2 的升序遞增過程中經(jīng)歷的所有字符
[字符*] 在SET2 中適用沙峻,指定字符會被連續(xù)復制直到吻合設(shè)置1 的長度
[字符*次數(shù)] 對字符執(zhí)行指定次數(shù)的復制,若次數(shù)以 0 開頭則被視為八進制數(shù)
[:alnum:] 所有的字母和數(shù)字
[:alpha:] 所有的字母
[:blank:] 所有呈水平排列的空白字符
[:cntrl:] 所有的控制字符
[:digit:] 所有的數(shù)字
[:graph:] 所有的可打印字符两芳,不包括空格
[:lower:] 所有的小寫字母
[:print:] 所有的可打印字符摔寨,包括空格
[:punct:] 所有的標點字符
[:space:] 所有呈水平或垂直排列的空白字符
[:upper:] 所有的大寫字母
[:xdigit:] 所有的十六進制數(shù)
[=字符=] 所有和指定字符相等的字符