【shell】那些年学过的sed

310 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

sed

sed是一种支持正则表达式的可交互式流编辑器(stream editor), 脚本中修改文本或者文本替换的最佳工具(文本流编辑器)

语法命令格式

  • sed [选项] sed 编辑命令(可以多个) 输入文件
  • shell 命令 | sed [选项] sed编辑命令
  • sed [选项] -f sed脚本文件 输入文件

常用选项

-n:只显示匹配处理的行(否则会输出所有)(取消默认的输出)

[root@localhost tmp]# sed -n '1,4p' ip_show.log

2018-01-28 10:06:22

2018-01-28 10:06:23 查看IP成功

2018-01-28 10:06:24 修改IP成功

2018-01-28 10:47:37 查看IP成功

[root@localhost tmp]# sed -n '4p' ip_show.log

2018-01-28 10:47:37 查看IP成功

-e:执行多个编辑命令时(一般用;代替)

-i:直接在文件中进行修改,而不是输出到屏幕

-r:支持扩展正则表达式

-f:从脚本文件中读取内容并执行(文件中的编辑命令每行一个,不用;隔开)

常用编辑命令

p:打印匹配行 print

d:删除指定行 delete

a:在匹配行后面追加 append

i:在匹配行前面插入 insert

c:整行替换

r:将文件的内容读入 read

w:将文本写入文件 write

s:字符串替换(匹配正则表达式)substitution

练习

  1. sed去掉接在命令行后面的注释

    sed 's/#.*//' tmp.txt

  2. sed取出/etc/passwd文件的第一列

    sed -r 's/(^[[:alnum:]]+)(.*)/\1/' /etc/passwd

  3. sed将PATH环境变量中的冒号换成换行

    echo $PATH |sed 's/:/\n/g'

  4. sed将PATH环境变量斜杠/换成斜杠\

    echo $PATH | sed 's/\//\\/g‘

    echo $PATH | sed ‘s#/#\\#’(分割符可以自己指定)

  5. sed修改SELINUX配置文件从开启变成禁用

sed –i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config

  1. 去掉/etc/passwd文件中第二个字段的x

    方法一:sed -r 's/(^[[:alnum:]]+)(:)(x)(.*)/\1\2\4/' /etc/passwd

    方法二:sed 's/:x:/::/' /etc/passwd

  2. 只显示ifconfig的ip地址

    方法一:ifconfig -a | sed -r -n 's/[^0-Z]+//;s/inet addr://;s/Bcast:[0-9].[0-9](.*)//;s/Mask(.*)//;/^[0-9]/p'

    方法二:ifconfig | sed -n -r 's/^[^0-Z]+//;s/(inet addr:)([0-9]+).([0-9]+).([0-9]+).([0-9]+)(.*)/\2.\3.\4.\5/p'