sed 与 awk

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/修饰符 :查找并替换。此三个斜线可以用任意字符作分隔符,如 [email protected]@@

例子

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的主要内容,如果未能解决你的问题,请参考以下文章

sed与awk

sed 与 awk

sed与awk

markdown SED与AWK学习

awk / sed:如果任何字段与模式匹配,则替换所有字段

Linux系列:grep过滤awk拆分sed替换的使用方法与区别