首页 > 系统服务 > 详细

Linux 三剑客

时间:2020-03-27 20:20:23      阅读:78      评论:0      收藏:0      [点我收藏+]

1、grep

grep          过滤需要的内容
-i            忽略大小写
-o            显示匹配到的内容,其他不显示
-v            排除内容
-c            统计匹配行个数
-n            显示匹配行及行号
-E            扩展查找模式(相当于 egrep)
-A            显示匹配行,并显示之后num行
-w            按单词过滤,相当于\b
grep stu –A 10 b.txt     过滤stu,显示改行之后的10行

2、sed

sed            流编辑器,实现对文件的增删改查
选项:
-n             屏蔽默认输出
-i             直接修改源文件
-e             可指定多个处理动作
-r             支持扩展表达式
{}             可组合多个命令,以;分隔
-f             使用sed脚本

定址符:
p              打印行
d              删除行
s              字符串替换

1              对第1行处理
1,3            对第1到3行处理
1,+3           对第1行后面3行处理
1~2            对1,3,5,7……行处理
1,$            对1行到最后1行处理
/aa/,/bb/      对a行到b行处理
/aaa/,9        对a行到第9行,若前9行没有,会显示后9行匹配的行

查:
sed –n ’20,30p’ b.txt         打印20到30行
sed -n 3p;6p  a.txt         打印第3和6行
sed -n 3,+6p  a.txt         打印第3行及其后6行
sed -n /^bin/p a.txt        打印以bin开头的行
sed -n p;n a.txt            打印奇数行,n表示读下一行(隔行)
sed -n n;p a.txt            打印偶数行,n表示读下一行(隔行)
sed -n 8,${n;p} a.txt       打印8行到末尾所有的偶数行
sed -n $= a.txt             打印文件的行数
sed -n /a/{=;p}  b.txt      显示行号
sed -n l aaa.jpg              打印不可见字符

删除
sed 3,5d a.txt              删除第3到5行
sed /xml/d a.txt            删除所有包含xml的行
sed /xml/!d a.txt           删除不包含xml的行
sed /^xml/d a.txt           删除以xml开头的行
sed $d a.txt                删除最后1行
sed /^$/d a.txt             删除所有空行
sed /^$/{n;/^$/d} a.txt     删除重复空行,连续两个空行只保留一个
sed -r/a|b/d a.txt          删除a或b的行
sed 2,~2d a.txt             删除2行到2的倍数行

改    
c    行替换
s   字符串替换
sed 2cxx m.txt              第2行替换成xx
sed 3,6cxx m.txt            第3到6行替换成1行xx
sed -n 2cxx\nyy m.txt       第2行替换成xx并换行yy(\n换行符==强制换行)
sed -e 3cxx -e 6cxx m.txt 第3行和第6行替换成xx
sed s#a#&s#g a.txt          所有的a都替换成as,&代表查找串(类似{})
sed s#a##g a.txt            删除所有行的a
sed 4,7s/^/#/ a.txt         4到7行加#号
sed 4,7s/^#// a.txt         4到7行去掉#号
sed s/a/B/ig a.txt          所有行的a替换成B(不区分大小写)

增
i    行前插入        
a    行后插入
sed 2ixx m.txt              在第2行前插入行xx
sed 3,6ixx m.txt            在第3-6行每行前插入xx
sed 2axx m.txt              在第2行后插入xx
sed /^yy/axx m.txt          在yy开头的行后插入xx

() 后向引用
把源数据保存起来,在替换的时再使用
sed -r s#(^.)#A\1# a.txt                       在行首添加A并输出
sed -r s#(^.)(.*)(.$)#\1# a.txt                输出\1的数据
sed -r s#(^.)(.*)(.$)#\3\2\1# a.txt            \3\2\1的数据
ls *.bak |sed -r "s#(^.*)(.bak$)#mv & \1.txt#g"  把所有.bak改成.txt sed
-nr s#([^:]+)(:.*:)(/.*$)#\3\2\1#gp /etc/passwd (1和3对调) (:开头1次或多次的字符串)(从:到:所有的字符串)(以/结尾的字符串)& 保存替换时的源字符串 sed -n s#20#&#gp a.txt 替换文本内容&=保留源字符) sed s/root/&admin/ a.txt 把root替换成rootadmin sed s/[0-9]/(&)/g a.txt 把数字用()括起来 sed –i.bak s#a#&s#g a.txt 修改源文件并备份 {} 命令组合键 sed -n 3{=;p} b.txt 输出3行并显示行号(3=;3p) ! 取反 sed 1,3!d a.txt 删除不是1到3行 sed /a/!d a.txt 删除不是a的行 sed 1~2d a.txt 删除奇数行(模式空间够2行,删1行) sed 1~2!d a.txt 删除偶数行 n 把当前行的下一行读取到模式空间 sed -n p;n a.txt 打印奇数行,n表示读下一行(隔行) sed -n n;p a.txt 打印偶数行,n表示读下一行(隔行) 文件操作 r 读取文件 --r动作应结合 -i 选项才会存入,否则只输出 w 保存到文件 --w动作以覆盖的方式另存为新文件 sed -i r a.txt b.txt 把a导入到b(b.txt要存在) sed -i 2r a.txt b.txt 把a导入到b的第2行下方 sed w c.txt b.txt 把b另存为c(c不用存在) sed /^x/w c.txt b.txt 把b以x开头的行存为c -H 模式空间---追加----保持空间--复制 -h 模式空间---覆盖----保持空间--复制 -G 保持空间---追加----模式空间--剪切 -g 保持空间---覆盖----模式空间--剪切 sed 1h;2H;$G b.txt 把文件的前2行复制到文件的末尾 sed 1h;2H;1,2d;$G b.txt 把文件的前2行剪切到文件的末尾

 

Linux 三剑客

原文:https://www.cnblogs.com/wuhg/p/12583733.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!