Shell文本中如何使用sed

小编给大家分享一下Shell文本中如何使用sed,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

sed 是 stream editor 的缩写,流编辑器,主要用于对标准输出或文件进行处理。

Shell文本中如何使用sed

语法:

stdout|sed[option]"patterncommand"
sed[option]"patterncommand"file1

常用选项(option)

#-n只打印静默模式匹配行,而不输出原行
#p是打印命令
➜sed'/hello/p'helloWorld.sh
#!/bin/bash

HELLObash
echo"helloworld"
echo"helloworld"
➜sed-n'/hello/p'helloWorld.sh
echo"helloworld"

#-e追加一组编辑命令
➜sed-n-e'/hello/p'-e'/HELLO/p'helloWorld.sh
HELLObash
echo"helloworld"

#-f把所有编辑命令保存在文件中,适用于复杂编辑操作
➜catedit.sed
/hello/p
➜sed-n-fedit.sedhello.md

#-E(或-r)支持扩展正则表达式
➜sed-n-E'/hello|HELLO/p'helloWorld.sh
HELLObash
echo"helloworld"

#-i直接修改源文件内容
#s是替换命令
#这里是吧helloWorld.sh文件中所有的hello改为hello123
sed-n-i's/hello/hello123/g'helloWorld.sh

匹配模式(pattern)

匹配模式说明
10command第 10 行
10,20command第 10 到 20 行
10,+5command第 10 到 16 行
/pattern1/command匹配 pattern1 对应的行
/pattern1/,/pattern2/command从 pattern1 对应的行开始,到 pattern2 的行
10,/pattern1/command从第 10 行开始,到 pattern1 的行
/pattern1/,10command从 pattern1 对应的行开始,到第 10 行

常用编辑命令(command)

查询

  • p 打印匹配的内容

增加

  • a string 行后追加

  • i string 行前追加

  • r file 从外部文件读入,在匹配的行后追加

  • w newfile 将匹配的行写入外部文件

删除

  • 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,忽略大小写

示例:

#删除以sys开头、并且以/sbin/nologin结尾的行
➜sed-i'/^sys.*\/sbin\/nologin$/d'passwd_bak

#删除注释行、空行
sed-i'/[:blank:]*#/d;/^$/d'passwd_bak

#查找在以vagrant开头的行,下一行追加内容
➜sed-i'/^vagrant/a这是追加的一行内容'passwd_bak

#把所有的root替换为root123
➜sed-i's/root/root123/ig'passwd_bak

#在所有以sys开头、以nologin结尾的行,尾部追加_666
#其中&表示前面正则匹配到的内容
➜sed-i's/^sys.*nologin$/&_666/g'passwd_bak

#把所有以sys开头、以nologin_666结尾的行改为
#以SYS_开头、以_777结尾,其中\1表示前面括号中匹配的中间部分内容
➜sed-i's/^sys\(.*\)nologin_666$/SYS_\1_777/g'passwd_bak

#把1~10行所有的sys改为SYS
➜sed-i'1,10s/sys/SYS/ig'passwd_bak

#统计my.cnf文件中mysqld的子配置项数量
#sed查找从[mysqld]到下一个[.*]之间的行
#grep-v过滤注释、空行和[.*]行
#wc-l统计最后的行数
sed-n"/^\[mysqld\]$/,/^\[.*\]$/p"/etc/my.cnf|grep-Ev'^$|[#;]|^\[.*'|wc-l

注意:如果匹配模式中存在变量,则建议使用双引号,如 sed -i "s/$OLD_STR/$NEW_STR/g" passwd_bak

以上是“Shell文本中如何使用sed”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-03-21 22:37:49
收藏
分享
海报
0 条评论
159
上一篇:怎么在Mysql中实现主从复制与读写分离 下一篇:如何使用HTML5做的导航条
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码