sed 命令
Linux 文本處理三劍客 之 sed
sed stream EDite
作為行編輯器,對文本進行編輯(以行為單位進行編輯)
注意:sed編輯文件,卻不改變原文件;
sed的工作原理:
將以此指定文本文件。依次讀取文本文件中每行的內容,讀取到模式空間中(PATTERN SPACE),在模式空間中進行文本匹配(正則表達式),對匹配后的內容進行修改(替換、刪除、打印、答應、修改、保存等)
用法:
sed 【參數】 “sed自己獨立的用法格式的語句”【文本文件】
常見選項
-r 拓展的正則表達式
匹配ip地址
所有的\都不要 |或者的意思
-n 拒絕默認輸出
-e script for while if
-f 指定腳本文件
-l 指定文本換行長度
-i直接修改文件內容
地址定界:
1、直接匹配數值
sed -n `5,7p` fileneme
2、d~步長
sed -n `1-3p` 文件
3、$ 指定行尾
sed -n `10,$p` 文件
4、/正則/
sed -n `/k\{5,\}/,$p`abc
5、0,addr
addr 可以為數字 /$/正則表達式
sed -n `0,/k\{5,\}/,p`abc
6、addr +N
配置addr行到,addr 后N行
sed -n `/\(as\)\+/,/\(ds\)\+/` abc
常見命令:
p print 打印(默認在屏幕上顯示出來) 建議和-n 一起使用
c 替換行
sed “/aaa/c \A”a
d刪除
sed “/aaa/d” a
sed "1,3d" a
n N 讀取、添加 模式匹配到的行的下一行內容,在對其進行操作
w 保存文件內容到一個新的文件
*S* 文本內容替換 默認替換模式匹配到的第一項
語法格式
s/pattern/字符串
中間的/可以替換為任意一個字符,例如:
g 全部的意思
\1\2\ 和正則表達式相同,實現反向引用;
指定某一個匹配項進行修改
& 調用前面(pattern)匹配的內容
sed "s/r/&er/g"文件
w
p
練習:
1、刪除/boot/grub/grub.conf文件中所有空白開頭的行行首的空白字符
sed `s/^[[:space:]]\+//g` /boot/grub/grub.conf
2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白符的行的行首的#和空白符;
sed `s/^#[[:space:]]\+//` /etc/fstab
3、給定一個目錄,取出其目錄命
sed `/[^/]\+$//`||dirname +文件名-----取出目錄文件的路徑部分
4、給定一個目錄,取出器文件名
sed `s#^/.*/##` basename +文件名-----取出文件名部分