sed用法

Posted

tags:

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

参数

-i # 将修改保存到文件
-e # 在命令行运行多条sed命令
-n # 打印由p命令指定的行
-f # 指定sed命令脚本文件
-r #使用扩展正则表达式,脱意

替换标记,4种可用的替换标记
s/pattern/replacement/flags
数字,替换一行中第几次模式匹配的地方
g 替换一行中所有匹配的地方
p 打印匹配的行
w file ,将替换结果写到文件file中,只写匹配的内容
数字寻址,用数字来指定行

#-i 参数的一个用法
sed -i.bak ‘s/bin/sbin/g‘ /etc/passwd
#此命令会在修改文件前备份,并以.bak为后缀

匹配行:

  1. sed -n ‘2,5p‘ /etc/passwd # 打印2-5行
  2. sed ‘1,10d‘ /etc/passwd # 删除1-10行
    #最后一行可以用 $ 表示,例如3,$表示从第三行到最后一行
    #addr1,+N # 表示 从addr1到addr1+N行,例如2,8,表示2-10行
    #addr1,~N # 表示从addr1到N的倍数的行,例如5,~4 ,表示5-8行,因为8是大于5的4的整数倍的最小一个
    #first~step # 表示以first开始,后面每次加step,例如1~2,表示所有的奇数行,如下所示

替换

  1. sed -n ‘s/pattern/replace/‘ /etc/passwd # 替换首次匹配的pattern为replace
  2. sed -n ‘s/pattern/replace/g‘ /etc/passwd # 替换所有,g表示全局
  3. sed -n ‘s/pattern/&replace/g‘ file # 在pattern后增加
  4. sed -n ‘s/pattern/replace&/g‘ file # 在pattern前增加
  5. sed -n ‘s/pattern/L&/g‘ file # 将pattern转换为大写
  6. sed -n ‘s/pattern/U&/g‘ file # 将pattern转换为小写
  7. sed -n ‘s/[A-Z]/l&/g‘ file # 将文件中的大写字母转换为小写,l,u只支持单个字符,L,U支持多个,大家应该知道是锚定的意思,说白了就是边界符,那么这就只会匹配第一个开头的字母,然后U的意思在元字符里的解释是“大写(不是标题首字符)E 以前的字符”,而u只是将下一个字符变为大写,注意它们的区别噢。

删除

#注意,d命令是在后面的,s命令在前面

  1. sed 1,5d file # 删除1-5行
  2. sed ‘/pattern/d‘ # 删除匹配的行
    #删除操作的匹配模式跟替换一样
  3. sed ‘s/[0-9]//g‘ 1.txt #删除所有数字
  4. sed ‘s/[^0-9]//g‘ 1.txt #删除所有非数字

插入

#在行后插入

  1. sed 1,4G file # 在1-4行后面插入一行空行
  2. sed ‘/pattern/G‘ # 在匹配行后面插入一个空行
  3. sed G file # 在每一行后面插入一个空行
  4. sed ‘s/$/wq&/‘ file # 在行尾插入字符wq
  5. sed ‘/pattern/a ew line‘ file # 在匹配行后插入一行new line,匹配模式可以是正则表达式,也可以是行地址
    #在行前插入
  6. sed 1,4‘{x;p;x}‘ file # 在1-4行前插入一个空行,注意与G的不同
  7. sed N‘{x;p;x}‘ # 在第N行前插入空行
  8. sed ‘/root/{x;p;x}‘ /etc/passwd # 在匹配行前插入空行
  9. sed ‘{x;p;x}‘ /etc/passwd # 在每一行前面插入空行
  10. sed ‘/pattern/i ew line‘ file # 在匹配行前插入一行new line
  11. 显示行号,‘=’ 命令能显示行号,但是行号是单独的一行,若想行号后面跟该行的内容,需要再进行处理
  12. sed ‘=‘ file | sed ‘N;s/ / /‘
  13. 调换两个字符串位置:
  14. head -n2 1.txt|sed -r ‘s/(root)(.*)(bash)/321/‘
    #在sed中可以用()去表示一个整体,123分别表示一个括号内容
  15. 打印文件中特定的某行到某行之间的内容
    sed -n ‘/起始内容/,/终止内容/p‘ filename
  16. 把一个文件多行连接成一行
    cat filename|xargs|sed ‘s/ /+/g‘
  17. 在文件中某一行最后添加一个数字
    sed ‘s/(^a.)/1 12/‘ test
    或者sed ‘s/.
    /& 12/‘ test
  18. 使用sed打印1到100行包含某个字符串的行
    sed -n ‘1,100{/abc/p}‘ 1.txt
  19. 转换大小写字母
    #sed中使用u表示大写,l表示小写
    sed ‘s/[a-z]/u&/g‘ filename #每个单词的第一个小写字母变大写
    sed ‘s/[a-z]/u&/g‘ filename #大写替换小写
    sed ‘s/[A-Z]/l&/g‘ filename #大写变成小写
  20. vim+sed删除行首数字和空字符
    在vim下输入:%s/^[0-9][0-9]// 删除行首数字
    sed -i ‘s/^
    //g‘ filename #删除行首所有空字符
    练手脚本.note
  21. grep -v ^# filename|sed /^[[:space:]]*$/d|sed /^$/d #删除文本中的空行、以空格组成的行及#注释的行
  22. sed -i ‘20,30s/^/#/‘ filename #给20到30行开头加上#号

以上是关于sed用法的主要内容,如果未能解决你的问题,请参考以下文章

sed的分组用法

sed基本用法:修改行

sed的用法

sed用法.md

sed用法

sed 用法