本文主要是介绍Linux文本三剑客sed,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
sed和awk
grep就是查找文本当中的内容,最强大的功能就是使用扩展正则表达式
sed
sed是一种流编辑器,一次处理一行内容。
如果只是展示,会放在缓冲区(模式空间),展示结束后,会从模式空间把结果删除
一行行处理,处理完当前行,才会处理下一行。直到文件的末尾。
sed的命令格式和操作选项:
sed -e '操作符 ' -e '操作符' 文件1 文件2
-e表示可以跟多个操作符,只要有一个操作,-e可以省略
sed -e '操作符1;操作符2' 文件1 文件2
选项:
-e:用于执行多个命令
-f:在脚本当中定义好了操作符,然后根据脚本内容的操作符对文件进行操作
-i:直接修改目标文件(慎用)
-n:仅显示script处理后的结果(不加-n,sed会有2个输出结果,加了-n之后就会把默认输出屏蔽,只显示一个结果)
p:打印结果
r:扩展正则表达式
s:替换,替换字符串
c:替换,替换指定行
y:替换,替换单个字符,多个字符替换必须和替换内容的字符长度保持一致
d:删除,删除行
a:增加,在指定行的下面一行插入内容
i:增加,在指定行的上面一行插入内容
r:在行后增加文本内容
$a 在最后一行插入新的内容
$i 在倒数第二行插入新的内容
$r 读取其他文件的内容,然后插入到对象文件的最后一行。
打印功能
寻址打印:按照指定的行进行打印
sed -n '=;p' test.txt
打印第二行和第五行
sed -n '2p;$p' test1.sh
打印奇数行和偶数行
cat -n test1.sh | sed -n 'p;n'(奇)
cat -n test1.sh | sed -n 'n;p'(偶)
过滤并打印包含o的
sed -n '/o/p' test.txt
使用正则表达式对文本内容进行过滤
sed -n '/^root/p' /etc/passwd
从指定行开始,打印得一个已bash为结尾的尾行
sed -n '3,/bash$/p' test1.sh
面试题:
如何面交互删除文本内容,但是不删除文件
两种方法: cat /dev/null > 文件名 sed -i 'd' test1.txt 删除文件内容,不删除文件 sed -i ‘d’ + 文件名
sed的删除操作
sed -n '3d' test,txt删除第三行打印剩余的行
匹配字符串的方式删除行
s替换字符串
sed -n 's/root/test/p' /etc/passwd
替换所有的root
sed -n 's/root/test/gp' /etc/passwd
首字母变成大写
sed 's/[a-z]/\lu&/' test.txt
u& 转移首字母大写的特殊符号。\转义符。
整行替换
sed '/IPADDR/c IPADDR=192.168.233.100' /etc/sysconfig/network-scripts/ifcfg-ens33
c要写替换行的后面
单个字符替换
[root@test1 opt]# sed 'y/one/123/' test1.txt
使用sed对字符串和字符的位置进行互换
[root@test1 opt]# echo luoyuhao | sed -r 's/(luo)(yu)(hao)/\2\3\1/' yuhaoluo
[root@test1 opt]# echo 德州扑克搞着了 | sed -r 's/(.)(.)(.)(.)(.)(.)(.)/\5\6\7\1\2\3\4/' 搞着了德州扑克
‘
[root@test1 opt]# cat test1.txt | sed -r 's/(.)-(.)(.jar)/\2/'
[root@test1 opt]# grep -E "[0-9]+." test1.txt
面试题:如何把版本号提取出来
ant-1.9.7.jar
ant-launcher-1.9.7.jar
antlr-2.7.7.jar
antlr-runtime-3.4.jar
aopalliance-1.0.jar
archaius-core-0.7.6.jar
asm-5.0.4.jar
aspectjweaver-1.9.5.jar
bcpkix-jdk15on-1.64.jar
bcprov-jdk15-1.46.jar
bcprov-jdk15on-1.64.jar
checker-compat-qual-2.5.5.jar
用grep来提取
grep -E "[0-9]+\." test2.txt
用sed提取
cat test2.txt | sed -r 's/(.*)-(.*)(\.jar)/\2/'
面试题:打印指定时间内的日志。
sed -n '/Jun 21 11:00:01/,/Jun 14:01:01/p' /var/log/messages
这篇关于Linux文本三剑客sed的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!