正则-sed
正则
Sed没有grep好用,但是可以替换,简单的说,grep用于查找,sed用于替换比较合适
1)Sed过滤出来的信息没有颜色显示
例如sed -n '/root/'p 1.txt 过滤出来对应的
2)sed同样支持. * 或者+号等
例如sed -n '/r*t/'p 1.txt
sed -nr '/o+t/'p 1.txt 找出含有t前有o的打印
(3)指定要过滤出特定的字符出现的次数
例如配置两个o出现sed -nr '/o{2}/'p 1.txt
(4)稍微复杂的过滤出字符串root或者字符串111
中间有|隔离开来sed -nr '/root|111/'p 1.txt
这里可以使用-e参数,效果是一样的
稍微注意的是p携带在单引号里面或者外面都可以的,而如果两个都匹配,则打印两次
(5)可以打印指定的行
例如打印第14行sed -n '14p' 1.txt
sed -n '3,5p' 1.txt //打印3-5行
sed -n '3,$'p test.txt //打印第3行到最后一行。
(6)其他应用
sed -n '/^s/'p 1.txt //打印出以s开头的行。
sed -n '/in$/'p 1.txt //打印出以in结尾的行
sed -n '/.+root.+/'p 1.txt //打印出root字符串在行中间的行。
(7)-I匹配时不区分大小写
(8)删除指定的行使用d参数
sed '3'd 2.txt
(9)指定性删除
sed -i '/abc/'d 2.txt
特别注意,这个删除是不可逆的,删除前一定要备份好数据
不加-i则不会删除掉对应的文件
这里其实sed也是只查看对应的,但是没有真正的删除
(10)替换
替换字符串,和vim非常的像
sed '1,10s/root/toor/g' 1.txt
sed -r '1,5s/ro+/b/g' test.txt //将1-5行中的ro+替换为b ,加上-r选项就可以不使用转义字符
删除所有的英文字母
head 1.txt |sed 's/[a-zA-Z]//g'
调换2个字符的位置
head |sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' //sed命令支持管道符,使用小括号把要替换的字符打包成一个整体,这里是:分割
添加指定内容,例如
sed 's/^.*$/123&/' 1.txt 给行首添加123
.*代表任意