Linux文本处理之sed

Posted youxiaoxian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文本处理之sed相关的知识,希望对你有一定的参考价值。

sed(stream editer),流编辑器,对标准输出或文件逐行进行处理

一、语法格式:

1、stdout | sed [option] "pattern command"

2、sed [option] "pattern command" file

 

二、sed的选项

-n 只打印模式匹配行(静默模式)

在sed的用法中,所有来自标准输入的内容都要print到屏幕,加-n后只显示经过sed处理的内容

-e 直接在命令行进行sed编辑,默认选项(只有1个时可以省略)

 

-f 编辑动作保存在文件中,指定文件执行

 

 

-r 支持扩展正则表达式

 

-i 直接修改文件内容(重要)

 

 

 

 三、sed中的pattern详解

 匹配模式                                     含义

10command                                 匹配到第10行(例:sed -n \'10p\' /etc/passwd,cat -n /etc/passwd)---p代表打印print

10,20command                             匹配从第10行开始,到第20行结束

10,+5command                             匹配从第10行开始,到第15行结束(例:sed -n \'10,+5p\' /etc/passwd )

/pattern1/command                      匹配到pattern1的行(例:sed -n \'/\\/sbin\\/nologin/p\' /etc/passwd)

/pattern1/,/pattern2/command      匹配到pattern1的行开始,到匹配到pattern2的行结束

10,/pattern1/command                   匹配从第10行开始,到匹配到pattern1的行结束

/pattern1/,10command                   匹配到pattern1的行开始,到第10行匹配结束

 

 四、sed中的编辑命令详解 

查询     p      打印

增加     a      行后追加(sed -i \'/^root/,/ntp/a this is a test\' passwd)

           i       行前追加(sed -i \'/^root/,/ntp/i  AAAAA BBBBB\' passwd)

           r       外部文件读入,往后追加

           w      匹配行写入外部文件

删除     d       删除

修改     s/old/new        将行内第一个old替换为new

           s/old/new/g     将行内全部的old替换为new

           s/old/new/2g   将行内从2个开始到剩下所有的old替换为new

           s/old/new/ig    将行内old全部替换为new,忽略大小写

转义符\\的作用是消除有特殊含义字符的特殊意义,使其还原为普通字符
其实sed的替换命令格式不一定要是 s/.../.../,下面这样也都可以:
s#...#...#
s_..._..._
即命令s后可以跟任意字符,只要跟替换内容不重复即可。这样,路径里的/就不再需要转义了。

sed中引用变量时注意事项:

     (1)、匹配模式中存在变量,则建议使用双引号;

     (2)、sed中需要引入自定义变量时,如果外面使用单引号,则自定义变量也必须使用单引号

 

五、利用sed查询特定内容

查询命令                              含义

1p                                       打印第1行内容

1,10p                                   打印1行到10行的内容

1,+5p                                  打印1行到6行的内容

/pattern1/p                         打印匹配到pattern1的行内容

/pattern1/,/pattern2/p         打印匹配到pattern1的行直到匹配到pattern2的所有行内容

10,/pattern1/p                      打印第10行直到匹配到pattern1的所有行内容

/pattern1/,10p                      打印匹配到pattern1的行到10行的所有行内容

 

六、利用sed删除特定内容

删除命令                              含义

1d                                       删除第1行内容

1,10d                                   删除1行到10行的内容

1,+5d                                  删除1行到6行的内容

/pattern1/d                         删除匹配到pattern1的行内容

/pattern1/,/pattern2/d         删除匹配到pattern1的行直到匹配到pattern2的所有行内容

10,/pattern1/d                      删除第10行直到匹配到pattern1的所有行内容

/pattern1/,10d                      删除匹配到pattern1的行到10行的所有行内容

 

 

1、删除配置文件中的#开头注释行和空行

sed -i \'/^#/d;/^$/d\' file(nginx.conf)

sed -i \'/[:blank:]*#/d\' file(#前有0个或多个空格)

2、在配置文件中所有不以#开头的行前面添加*号

sed -i \'s/^[^#]/\\*&/g\' file---反向引用&

 

七、利用sed修改文件内容

编辑命令                                          含义

1s/old/new                                      替换第1行内容old为new

1,10s/old/new                                  替换1行到10行的内容old为new

1,+5s/old/new                                  替换1行到6行的内容old为new

/pattern1/s/old/new                         替换匹配到pattern1的行内容old为new

/pattern1/,/pattern2/s/old/new         替换匹配到pattern1的行直到匹配到pattern2的所有行内容old为new

10,/pattern1/s/old/new                      替换第10行直到匹配到pattern1的所有行内容old为new

/pattern1/,10s/old/new                      替换匹配到pattern1的行到10行的所有行内容old为new

实际应用

sed -i \'s/[0-9]*//g\' file(通篇搜索,0个或多个数字替换为空---正则表达式)

 

八、利用sed追加文件内容

 

 

 

 

 

 

 

以上是关于Linux文本处理之sed的主要内容,如果未能解决你的问题,请参考以下文章

Linux文本处理三剑客之sed

Linux文本处理之sed

Linux文本处理三剑客之---sed

Linux文本处理三剑客之sed

Linux运维文本处理三剑客之sed命令

Linux文本处理工具之grep sed简概