首页 > 代码库 > sed 与 awk
sed 与 awk
一、sed (stream editor based on line)
1.1 基本用法
sed默认情况下不编辑源文件,仅对模式空间中的数据做处理
sed ‘AddressCommand‘ file ...
Address表示方法:
1、起始行和结束行
例子:1,100 表示第一行到100行
2、使用模式
/RegExp/ 使用正则表达的模式。例子:/^root/ 以root开头的行
3、/pattern1/,/pattern2/
指的是第一次被模式1匹配到的行开始,至第1次被模式2匹配到的行结束,中间的所有航
4、LineNumber
指定的行 ,$表示最后一行,$-1 表示倒数第二行
5、StartLine,+N
从startLine开始,向后的N行。
Command:
1)d:删除符合条件的行
例如:sed "1,2d" /etc/fstab 删除前两行,处理结束后,将模式空间打印到屏幕
sed ‘3,$d‘ /etc/fstab
sed ‘/^\//d‘ /etc/fstab 显示以斜线开始的行
2)p:显示
sed ‘/^\//p‘ /etc/fstab显示以斜线开头的行,,结果符合条件的显示了两次
应使用
sed -n ‘/^\//p‘ /etc/fstab
3) a \"string":在匹配到的行后面增加一行,内容为“string”
sed -n ‘/^\//a \# hello world‘ /etc/fstab
在符合条件的行后面加一行hello world
sed -n ‘/^\//a \# hello world\n#hello linux ‘ /etc/fstab
在符合条件的行后面加一行hello world
4)i \string :在指定的行前面增加一行,内容为"string"
5)r 跟文件名:将指定的文件的内容添加到符合条件的行处
例子:
sed ‘2r /etc/issue‘/etc/fstab
在第二行后面把/etc/issue整个文件加进来
sed ‘1,2r /etc/issue‘/etc/fstab
在第1行和2行后面把/etc/issue整个文件加进来
6)w 将地址指定范围内的内容另存至指定的文件中。
sed -n ‘/oot/w /tmp/oot.txt‘ /etc/fstab
将/etc/fstab 中 含有oot的行存储到oot.txt
7)s /pattern/string/修饰符 :查找并替换。此三个斜线可以用任意字符作分隔符,如 s@@@
例子
sed ‘s/oot/OOT/‘ /etc/fstab 查找oot替换为大写的OT
sed ‘s/^\//#/‘ /etc/fstab 将行首的斜线替换成#
如果不限定行首,则只替换每一行中第一次被模式匹配到的串
加修饰符
g:全局替换,只要找到替换
例子sed ‘s/\//#/g‘ /etc/fstab 全局替换
i:查找时忽略大小写
grep 后项引用 前面括起来,后面用\1 ,\2,\数字来引用
创建文件test.txt,写入内容
hello,like
hi,my love
sed ‘s#l..e#l..er#g‘ test.txt 执行未达到预期结果,因为后项不支持正则表达式
sed ‘s#l..e#&r#g‘ test.txt &可以支持后项引用
硬用后项引用 则用反斜线转义括号
sed ‘s#\(l..e\)#\1r#g‘ test.txt
只使用前面匹配到的一部分,则只能用后项引用了
把like改成Like
把love改成Love
sed ‘s#l\(..e\)#L\1#g‘ test.txt
options:
-n :静默模式,不显示模式空间中的。只跟命令相关
-i :直接修改源文件慎用
-e SCRIPT -e SCRIPT:每个后面跟一组脚本,同时使用多次
-f /path/to/sed_SCRIPT:
sed -f /path/to/script file
-r :允许使用扩展正则表达式
例子:
history | sed ‘s#^[[:space:]]*##g‘
===========================================
1、删除/etc/grub.conf文件中行首的空白字符
2、替换/etc/inittab文件中"id:3:initdefault:" 一行中的数字为5
3、删除/etc/inittab文件中的空白字符
4、删除/etc/inittab文件中的开头的#号
4、删除/etc/inittab文件中的开头的#号及后面的空白字符,#号后面有空白字符的才可以删
4、删除某文件中以空白字符跟了#这样的类的行中的空白字符和#(#前面的空白字符)
5、取出一个文件路径的目录名称。例如:
/etc/rc.d
/var/log
echo "/etc/rc.d" | sed
二、awk
2.1 基本用法
sed 与 awk