sed命令学习
sed:用于过滤和转换文本的流编辑器(Stream Editor);行编辑器
sed: 模式空间
默认不编辑原文件,仅对模式空间中的数据做处理;处理结束后,将模式空间打印至屏幕;
选项:
sed [options] 'AddressCommand' file ...
-n: 静默模式,不再默认显示模式空间中的内容
-i: 直接修改原文件(慎用)
-e SCRIPT -e SCRIPT:可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
sed -f /path/to/scripts file
-r: 如果使用扩展正则表达式需要加-r
Address:
1、StartLine,EndLine
比如1,100
$:最后一行
2、/RegExp/
/^root/
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
4、LineNumber
指定的行
5、StartLine, +N
从startLine开始,向后的N行;
命令Command
d: 删除符合条件的行;
sed '1,12d' /etc/inittab #删除1-12行内容,显示剩余行
sed '5,$d' /etc/inittab #删除5到最后一行,显示1-4行内容
p: 显示符合条件的行;
sed -n '1,12p' /etc/inittab #要加-n,否则1-12行的内容会显示两次,其他内容一次
a \string: 在指定的行后面追加新行,内容为string
\n:可以用于换行
sed '3,4a \This is new word!' /etc/grub.conf #在第3和4行后面添加内容This is new word!
sed '7a \#This is new word!\nThis is second line!' /etc/grub.conf #在第7行后面添加This is new word!并且换行添加his is second line!
i \string: 在指定的行前面添加新行,内容为string #用法同上
r FILE: 将指定的文件的内容添加至符合条件的行处
sed '4r /etc/issue' /etc/fstab #将/etc/issue内容添加到/etc/fstab的第4行后面(也就是第5行开始)并显示出来
sed '$r /etc/issue' /etc/fstab #将/etc/issue内容添加到/etc/fstab的最后一行显示出来
w FILE: 将地址指定的范围内的行另存至指定的文件中;
sed '/OS/w /root/a.txt' /etc/issue #把issue文件中包含OS的行,写到a.txt
sed '2,$w /root/a.txt' /etc/issue #把issue文件中第2行到最后一行内容,写到a.txt
s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
修饰符
g: 全局替换
i: 忽略字符大小写
&: 引用模式匹配整个串
s/content1/content2/g = s#content1#content2#g = s&content1&content2&g
sed 's/i..t/&TTT/g' /etc/inittab #查找inittab文件里全部i..t的内容,并且替换为后面加TTT
sed 's#\(i..t\)#\1TTT#g' /etc/inittab #同上
sed 's#\(/.*t/\)#\1TTTTT#g' /etc/inittab 查找inittab文件里全部/.*/的内容,并且替换为后面加TTT
#sed命令是行编辑器
删除/etc/grub.conf文件中行首的空白符;
sed 's#^[[:space:]]*##g' /etc/grub.conf
替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab