Linux shell sed 命令详解

 详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761

sed命令的正则表达式实践

https://www.cnblogs.com/zoe233/p/11920446.html

sed命令常见用途

  1. 查找关键词做全局替换
  2. 查找某行的关键词做替换
  3. 查找关键字所在行,并且执行指定关键字的替换
  4. 在某行之后追加
  5. 查找关键字,并且在第二行追加
  6. 删除包含关键字的行
  7. 查看指定的行
  8. 在最后一行追加
  9. sed -e 参数,屏幕输出,一次更改多替换文本中多个值

1. 查找关键词做全局替换

sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config

2. 查找/etc/crontab 第17行,并且把0,30替换为15,45

sed -i '17s/0,30/15,45/' /etc/crontab

3. 查找/etc/crontab 中的关键字script.sh,并且把15,45替换为0,30

sed -i '/script.sh/s/15,45/0,30/' /etc/crontab

4. 在第17行后添加新的 一行内容

sed -i '17a * * * * root /root/test.sh' /etc/crontab

5. 在/etc/crontab中查找关键字script,并且该关键字的下一行追加一行新内容

sed -i '/^.*script.*$/a30,45 * * * * root /root/check.sh' /etc/crontab

6. 在/etc/crontab中查找关键字check.sh,并且把这行的内容替换掉

sed -i '/^.*script.*$/c30,45 * * * * root /root/check.sh' /etc/crontab

7.  在/etc/crontab中查找关键字check.sh,并且删除该行

sed -i '/check.sh/d' /etc/crontab

8. 显示第17到18行之间的内容

sed -n '17,18p' /etc/crontab

9. 在最后一行追加一行0 * * * * root /root/check.sh

sed -i '$a * * * * root /root/check.sh' /etc/crontab

 10. sed 命令处理换行符,例如替换或者删除

sed ':label;N;s/
/:/;b label' filename
sed ':label;N;s/
/:/;t label' filename

上面的两条命令可以实现将文件中的所有换行符替换为指定的字串,如命令中的冒号。命令的解释:
:label; 这是一个标签,用来实现跳转处理,名字可以随便取(label),后面的b label就是跳转指令
N; N是sed的一个处理命令,追加文本流中的下一行到模式空间进行合并处理,因此是换行符可见
s/ /:/; s是sed的替换命令,将换行符替换为冒号
b label 或者 t label b / t 是sed的跳转命令,跳转到指定的标签处
标签跳转和N的追加命令实现了每一行的不间断放入模式处理空间,从而不会漏掉每一个换行符,而没有标签的话跳转的话,就只能每两行替换掉一个换行符,对比效果:

$  echo "a,b,c,d" |sed 's/,/
/g'|sed ':x;N;s/
/,/;b x'
a,b,c,d
$  echo "a,b,c,d" |sed 's/,/
/g'|sed 'N;s/
/,/'
a,b
c,d

 10. sed -e参数,并不真正编辑源文件,只是屏幕输出

一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
1  root:x:0:0:root:/root:/bin/blueshell
2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

如果只是处理一个东西,可以省略-e ,接多个就不能省略

原文地址:https://www.cnblogs.com/faberbeta/p/sed001.html