sed(Stream Editor):流編輯器
一次只讀取一行
模式空間
1、sed語法:
sed [option] "script" FILE...
2、選項:
-n:靜默模式,不輸出模式空間中的內容
-r:使用擴展的正則表達式
-f:/path/to/sed_script_file:指定sed腳本文件
-e 'script' -e 'script' :指定多個編輯腳本
-i:直接修改讀取的文件內容,而不是輸出到終端
3、編輯命令:
d:刪除
p:打印
i \text:匹配內容上面增加text內容
a \text:匹配內容西面增加text內容
r /path/to/somefile:在制定位置把另外一個文件的內容插入進來
w /path/to/somefile:將符合條件的所有行保存至指定得文件中
= :顯示符合條件行的行號
例如:# sed -n '/^UUID/=' /etc/fstab
s///:查找條件可以使用模式,但要替換的內容不行
4、地址定界:
startline,endline:1,3
/pat1/,/pat2/
/pattern/
用法:
sed [options] 'addr1[,addr2]編輯命令' FILE ...
sed [options] "addr1[,addr2]編輯命令" FILE ...
5、正則表達式:
基本的:
字符:
.
[]
[^]
次數:
*
\?
\{m,n\}
錨定:
^
$
\<,\b
\>,\b
分組:
\(\)
引用:
\1,\2,...
擴展:
字符:
.
[]
[[:lower:]],[[:punct:]],[[:alnum:]]
次數:
*
?
+
{m,n}
錨定:
^
$
\>,\b
\<,\b
或:
a|b
分組:
()
引用:
\1,\2,...
sed '地址定界s@查找條件@替換文本@'
6、修飾符:
g:global,全局替換
i:ignore-case,不區分字符大小寫
7、例子:
1、將selinux的enforcing改成disabled
# sed 's@^SELINUX=enforcing@SELINUX=disabled@g' /etc/selinux/config
2、刪除/etc/init.d/functions文件中的空白行
# sed '/^$/d' /etc/init.d/functions
3、刪除/etc/inittab文件中位於行首的#號
# sed 's@^#@@g' /etc/inittab
4、刪除/etc/rc.d/rc.sysinit文件夾中以#後跟至少一個空白字符開頭的行的行首的#和空白字符
# sed 's@^#[[:space:]]\{1,\}@@g' /etc/rc.d/rc.sysinit
5、刪除/boot/grub/grub.conf文件中行首的空白字符
# sed 's@^[[:space:]]\{1,\}@@' /boot/grub/grub.conf
6、取出一個文件路徑的目錄名稱
# echo /etc/sysconfig/network/ | sed 's@[^/]\{1,\}/\?$@@'