sed简单使用

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

语法格式

  • 第一种形式:
    stdout | sed [option] "pattern command"
  • 第二种形式:
    sed [option] "pattern command" file

sed的选项

选项含义
-n只打印模式匹配行
-e直接在命令行进行sed编辑,默认选项
-f编辑动作保存在文件中,指定文件执行
-r支持扩展正则表达式
-i直接修改文件内容

sed.txt

I love python
I love PYTHON

Hadoop is bigdata frame
sed -n -r '/python|PYTHON/p' sed.txt
sed -in 's/love/like/gp' sed.txt

sed中的pattern详解

匹配模式含义
10command匹配到第10行
10,20command匹配从10行开始,20行结束
10,+5command匹配从第10行开始,到第16行结束
/pattern1/command匹配到pattern1的行
/pattern1/,/pattern2/command匹配到pattern1的行开始,到匹配pattern1的行结束
10,/pattern1/command匹配从第10行开始,到匹配到pattern1的行结束
/pattern1/,10command匹配到pattern1的行开始,到第10行匹配结束

sed中的编辑命令详解

类别编辑命令含义
查询p打印
增加a, i, r, w行后追加, 行前追加, 外部文件读入,外部文件读入行后追加, 匹配行写入外部文件
删除d删除
修改s/old/new, s/old/new/g, s/old/new/2g/, s/old/new/ig第一个替换, 整行全部替换, 从第二个到整行替换, 忽略大小写的全行替换

加上**=**标志,就是显示行号

注意在脚本中使用,引用变量的时候,使用双引号

利用sed查询特定内容

查询命令含义
1p打印第一行内容
1,10p打印1-10行内容
1,+5p打印1,1+5行内容数据
/pattern1/p打印每一行中匹配到pattern1的行内容
/pattern1/,/pattern2/p打印匹配到pattern1的行直到匹配到pattern2的所有行的内容为止
/pattern1/,10p打印匹配到pattern1的行到10行的所有行内容
10,/pattern1/p打印第10行直到匹配到pattern1的所有行内容

对于sed提取,可以使用替换删除某些字符,实现剥离
可以多用几个管道实现多重规则

利用sed删除特定内容

查询命令含义
1d删除第一行内容
1,10d删除1-10行内容
1,+5d删除1,1+5行内容数据
/pattern1/d删除每一行中匹配到pattern1的行内容
/pattern1/,/pattern2/d删除匹配到pattern1的行直到匹配到pattern2的所有行的内容为止
/pattern1/,10d删除匹配到pattern1的行到10行的所有行内容
10,/pattern1/d删除第10行直到匹配到pattern1的所有行内容
  1. 删除配置文件中所有的注释行和空行
    sed -i '/[:blank:]*#/d;/^$/d' nginx.confg
  2. 在配置文件中所有不以#开头的行前面添加*符号, 注意:以#开头的行不添加
    sed -i 's/[^#]/\*&/g nginx.conf'

利用sed修改文件内容

查询命令含义
1s/old/new/替换第一行内容
1,10s/old/new/替换1-10行内容
1,+5s/old/new/替换1,1+5行内容数据
/s/old/new/attern1/p替换每一行中匹配到pattern1的行内容
/s/old/new/attern1/,/pattern2/p替换匹配到pattern1的行直到匹配到pattern2的所有行的内容为止
/s/old/new/attern1/,10p替换匹换配到pattern1的行到10行的所有行内容
10,/s/old/new/attern1/p替换第10行直到匹配到pattern1的所有行内容

参考链接

总结

大致和vim一样, 主要是pattern和cmd的理解