sed非交互式的文本编辑工具,功能强大支持正则,可以写在脚本中达到对文件的非交互修改,是不是比vim强大很多
sed工具是逐行处理器,简单理解就是读入文本第一行匹配,符合执行动作第二行第三行......
这里的格式 :sed 选项 “ 匹配条件 指令“ 文件 #条件不写就是匹配所有行
选项:-r支持扩展正则 -i匹配文本修改 -d删除匹配行 -n屏蔽默认输出
匹配条件:行,正则,全部
指令 : d删除 p打印 s替换
匹配条件:1.行匹配 sed -n ”3p“ /etc/passwd 打印第三行
sed -n ”3,6p“ /etc/passwd 打印3-6行
sed -n “4!d” /etc/passwd 删除除第四行外所有
sed -n ”3p;5p;10,+2d“ /etc/passwd 打印3行,5行,删除第10行和其后面2行
sed -n “ 2~2p ” /etc/passwd 打印第2行,2+2行,2+2+2行 就是偶数行
sed -n “1~2p” /etc/passwd 打印第1行,1+2行,1+2+2行 就是奇数行
* 2.正则匹配 sed -n "/^root/p" /etc/passwd 打印以root开头的行
sed -n “/bash$/p” /etc/passwd 打印以bash结尾的行
sed -n “/^$/d” httpd.conf 删除文件空白行
sed -n “/^root/!d” /etc/passwd 删除除了以root开头的行
sed -r "/(^$|^#)/d" /etc/httpd/conf/httpd.conf 删除空行和以星号开头的行
sed -n “/root/=” /etc/passwd 显示匹配root的行号
sed -n “$=” /etc/passwd 显示尾行的行号 ,文件多少行
重点指令s加扩展正则
这里写个素材 7.txt 2017 2011 2018
2017 2017 2024
2017 2017 2017
sed “s/2017/xxxx/” 7.txt 替换第一个2017为xxxx
sed ”s/2017/xxxx/2“ 7.txt 这里替换每行第二个2017为xxxx
为了方便查看替换结果 上面两个改造
sed -n “s/2017/xxxx/p” 7.txt 替换第一个2017为xxxx
sed -n ”s/2017/xxxx/2p” 7.txt 这里替换每行第二个2017为xxxx
sed -n ”s/2017/xxxx/gp” 7.txt 这里替换全部2017为xxxx
sed -n “s/2017//2p” 7.txt 这里是删除每行第二个2017 与d指令不同d只能删除行
做个例题:将所有passwd下的 sbin/nologin 替换为 bin/bash(使用技巧s的/可以改为#或者其他要不然就只能加转义)
sed -n “s/\/sbin\/nologin/\/bin\/bash/p” /etc/passwd 比较下还是用第二个吧
sed -n “s#/sbin/nologin#/bin/bash#p” /etc/passwd 显示修改的内容
/可以用 # ! , 替换
sed -n "/^example/s/^/#/" httpd.conf 把example开头行注释
sed -n "s/^#example/example/" httpd.conf 把example取消注释
这里sed精髓 扩展正则:()保留【复制】 \1 粘贴第一个括号
写个a.txt qu guan wen
将第一个字与最后一个字替换位置
sed -r “s/(^.)(.*)(.$)/\3\2\1/” a.txt 把文件内容拆分复制再粘贴 'q' 'u guan we' 'n '
正则 . 代表任意单个字符 .* 代表但个字符匹配任意次
只要想到的就能匹配到的正则非常强大流弊
sed工具是逐行处理器,简单理解就是读入文本第一行匹配,符合执行动作第二行第三行......
这里的格式 :sed 选项 “ 匹配条件 指令“ 文件 #条件不写就是匹配所有行
选项:-r支持扩展正则 -i匹配文本修改 -d删除匹配行 -n屏蔽默认输出
匹配条件:行,正则,全部
指令 : d删除 p打印 s替换
匹配条件:1.行匹配 sed -n ”3p“ /etc/passwd 打印第三行
sed -n ”3,6p“ /etc/passwd 打印3-6行
sed -n “4!d” /etc/passwd 删除除第四行外所有
sed -n ”3p;5p;10,+2d“ /etc/passwd 打印3行,5行,删除第10行和其后面2行
sed -n “ 2~2p ” /etc/passwd 打印第2行,2+2行,2+2+2行 就是偶数行
sed -n “1~2p” /etc/passwd 打印第1行,1+2行,1+2+2行 就是奇数行
* 2.正则匹配 sed -n "/^root/p" /etc/passwd 打印以root开头的行
sed -n “/bash$/p” /etc/passwd 打印以bash结尾的行
sed -n “/^$/d” httpd.conf 删除文件空白行
sed -n “/^root/!d” /etc/passwd 删除除了以root开头的行
sed -r "/(^$|^#)/d" /etc/httpd/conf/httpd.conf 删除空行和以星号开头的行
sed -n “/root/=” /etc/passwd 显示匹配root的行号
sed -n “$=” /etc/passwd 显示尾行的行号 ,文件多少行
重点指令s加扩展正则
这里写个素材 7.txt 2017 2011 2018
2017 2017 2024
2017 2017 2017
sed “s/2017/xxxx/” 7.txt 替换第一个2017为xxxx
sed ”s/2017/xxxx/2“ 7.txt 这里替换每行第二个2017为xxxx
为了方便查看替换结果 上面两个改造
sed -n “s/2017/xxxx/p” 7.txt 替换第一个2017为xxxx
sed -n ”s/2017/xxxx/2p” 7.txt 这里替换每行第二个2017为xxxx
sed -n ”s/2017/xxxx/gp” 7.txt 这里替换全部2017为xxxx
sed -n “s/2017//2p” 7.txt 这里是删除每行第二个2017 与d指令不同d只能删除行
做个例题:将所有passwd下的 sbin/nologin 替换为 bin/bash(使用技巧s的/可以改为#或者其他要不然就只能加转义)
sed -n “s/\/sbin\/nologin/\/bin\/bash/p” /etc/passwd 比较下还是用第二个吧
sed -n “s#/sbin/nologin#/bin/bash#p” /etc/passwd 显示修改的内容
/可以用 # ! , 替换
sed -n "/^example/s/^/#/" httpd.conf 把example开头行注释
sed -n "s/^#example/example/" httpd.conf 把example取消注释
这里sed精髓 扩展正则:()保留【复制】 \1 粘贴第一个括号
写个a.txt qu guan wen
将第一个字与最后一个字替换位置
sed -r “s/(^.)(.*)(.$)/\3\2\1/” a.txt 把文件内容拆分复制再粘贴 'q' 'u guan we' 'n '
正则 . 代表任意单个字符 .* 代表但个字符匹配任意次
只要想到的就能匹配到的正则非常强大流弊
sed -r "s/^(.) (.*) (.)$/\3\ \2 \1/" a.txt 这个 效果是 ’wen ‘ ’guan ‘ ’qu‘
删除所有的数字
sed -r “s/[0-9]//g” /etc/passwd 替换文件中所有数字一定注意小g,g没有只替换第一个 。