Shell文本中如何使用sed
小编给大家分享一下Shell文本中如何使用sed,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
sed 是 stream editor 的缩写,流编辑器,主要用于对标准输出或文件进行处理。
语法:
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”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
浅谈php一句话木马工作原理
-
PHP中9个非常非常有用的函数
-
Shell编程基础(五)Shell数组与Subshell
-
linux shell 解析命令行参数及while getopts用法小结
目录linuxshell解析命令行参数|getpotsgetpotslinuxshell解析命令行参数|getpotsd...
-
jenkins如何实现shell脚本化定时执行任务
-
nginx服务启动程序的Shell脚本怎么写
nginx服务启动程序的Shell脚本怎么写这篇文章主要介绍“ng...
-
Linux中Shell函数怎么调用
-
Shell怎么监控httpd服务80端口状态
Shell怎么监控httpd服务80端口状态本篇内容介绍了“She...
-
shell中怎么根据进程查找指定容器
-
Linux shell中for循环怎么用