三剑客
三剑客
功能
grep
过滤
sed
过滤 替换(修改)
增删改查
awk
过滤 取列 统计计算
grep
过滤
参数
-i
过滤的不区分大小写
ignore case 忽略大小写
-v
取反
-n
显示行号
-o
显示过程
显示每次grep匹配到的内容
-E
支持扩展正则
egrep
-w
按照单词进行匹配
-l(小写字母L)
在系统中找出包含oldboy的文件(只想要文件名)
grep过滤的时候只显示文件名![在这里插入图片描述](https://img-blog.csdnimg.cn/2019042017371559.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDgzMjY3NA==,size_16,color_FFFFFF,t_70)
-A
after
显示grep找出的内容及接下来的几行
-B
before
-C
-C2===
-R
递归进行过滤
grep -Rl 'oldboy' /etc/ /tmp/ /root/![在这里插入图片描述](https://img-blog.csdnimg.cn/20190420173722974.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDgzMjY3NA==,size_16,color_FFFFFF,t_70)
sed
stream editor流编辑器
一行接一行
功能
增删改查
查
p查看 print
根据行号进行查找
sed -n ‘3p’lidao.txt
行号范围
‘1,5p’
使用正则过滤
sed -n ‘/oldb.y/p’ lidao.txt
使用正则表示范围
sed -n ‘/102/,/105/p’ lidao.txt 行是102的字符到105的字符
增
>>
a append
追加 在指定的行后面追加内容
sed '4aoldfox' oldboy.txt
insert
插入 在你指定的行上面插入信息
sed ‘3ixiaoming’ lidao.txt
c replace
把这一行的内容先清空 然后写入
sed ‘3c12306,lidao,HO’ lidao.txt
删
d delete
删除oldboy.txt中的第2行
删除oldboy.txt中的空行
不显示文件/etc/ssh/sshd_config 的空行或以#号开头的行
用sed来删除空行
显示空行 用sed sed -n ‘/^KaTeX parse error: Expected group after '^' at position 45: …用awk awk ‘/^̲/’
不显示空行 用sed sed -n ‘/^KaTeX parse error: Expected group after '^' at position 48: …p grep -v ‘^̲’ oldboy.txt
修改
s sub
s 替换
g global 全局替换
sed默认替换每一行的第1个内容(第1个匹配到的)
如果有g 则进行全局替换 替换每一行中匹配到的内容
使用的格式
sed 's#oldboy#oldfox#g' 'lidao.txt'
sed 's@oldboy@oldfox@g' 'lidao.txt'
后向引用
在前面有(##)把你要的内容保护起来,在后面两个##之间通过\数字来引用
先保护 再使用
echo 123456 |sed -r ‘s#(.*)#<\1>#g’
参数
-n
取消默认输出
-i
修改文件内容
-r
支持扩展正则
i.bak
先备份文件为oldboy.txt.bak
然后修改文件内容
sed命令执行过程
awk
取行与取列
过滤
计算
#不显示文件/etc/ssh/sshd_config 的空行或以#号开头的行
sed 's#oldboy#alex#g ’ oldboy.txt
目标 替换成什么
[root@oldboyedu59 /oldboy]# echo 123456
想要结果是
<123456>
[root@oldboyedu59 /oldboy]# echo 123456 |sed -r ‘s#(…)(…)(…)#\1<\2>\3#g’
12<34>56
[root@oldboyedu59 /oldboy]#
[root@oldboyedu59 /oldboy]# echo ‘<1><2><3><4><5><6>’
<1><2><3><4><5><6>
[root@oldboyedu59 /oldboy]# echo 123456 |sed -r ‘s#(.)#<\1>#g’
<1><2><3><4><5><6>