三剑客深入:
grep 过滤
参数:
-E 支持扩展正则====egrep
-o 只显示匹配的内容 显示grep执行过程
-v 取反
-I 不区分大小写 ignore case find /oldboy -type f -iname “*.txt”
-n 显示行号 cat -n
-w 按照单词进行匹配
-A 9 after 显示grep找出的行及接下来的 9行
-B 9 before
-C 9 上下各9行
-P ??
-r 递归过滤,在目录下所有层进行过滤
-l (小写字母L)
练习题:
1、 Unix中在当前目录下所有.cc 的文件中找到含有“asiainfo”内容的文件,命令为_______
find ./ -type f -name “*.cc”|xargs grep ‘asiainfo’ 找出这个目录下面所有层的内容
grep ‘asiainfo’ ./*.cc 只用grep只默认显示第一层
find命令可以找出这个目录下面所有层的内容 [root@oldboyedu ~]# find /oldboy/ -type f -name "*.cc" |xargs grep 'oldboy'
/oldboy/alex/1.cc:oldboy 127.0.0.1
/oldboy/alex/2.cc:oldboy 127.0.0.1
/oldboy/alex/3.cc:oldboy 127.0.0.1
/oldboy/alex/4.cc:oldboy 127.0.0.1
/oldboy/alex/5.cc:oldboy 127.0.0.1
/oldboy/1.cc:oldboy 127.0.0.1
/oldboy/2.cc:oldboy 127.0.0.1
/oldboy/3.cc:oldboy 127.0.0.1
/oldboy/4.cc:oldboy 127.0.0.1
/oldboy/5.cc:oldboy 127.0.0.1
只用grep只能默认显示第1层 [root@oldboyedu ~]# grep 'oldboy' /oldboy/*.cc
/oldboy/1.cc:oldboy 127.0.0.1
/oldboy/2.cc:oldboy 127.0.0.1
/oldboy/3.cc:oldboy 127.0.0.1
/oldboy/4.cc:oldboy 127.0.0.1
/oldboy/5.cc:oldboy 127.0.0.1
[root@oldboyedu ~]# grep -r 'oldboy' /oldboy/
/oldboy/test.sh:echo oldboy
/oldboy/alex/1.cc:oldboy 127.0.0.1
/oldboy/alex/2.cc:oldboy 127.0.0.1
/oldboy/alex/3.cc:oldboy 127.0.0.1
/oldboy/alex/4.cc:oldboy 127.0.0.1
/oldboy/alex/5.cc:oldboy 127.0.0.1
/oldboy/1.cc:oldboy 127.0.0.1
/oldboy/2.cc:oldboy 127.0.0.1
/oldboy/3.cc:oldboy 127.0.0.1
/oldboy/4.cc:oldboy 127.0.0.1
/oldboy/5.cc:oldboy 127.0.0.1
2、找出当前目录下包含127.0.0.1关键字的文件?
grep -r ‘127.0.0.1’ .
3、写出查询file.txt以abc结尾的行
grep ‘adb$’ file.txt
4、写出删除abc.txt文件中的空行
egrep -v “^$|^ $” abc.txt
cat -A 行首显示$。
基础
[root@oldboyedu /oldboy]# grep -v '^$' /oldboy/blank.txt
oldboy oldboy
oldboy
alex
lidao996
中级:文件中有些行包含空格(只有空格)
[root@oldboyedu /oldboy]# egrep -v '^' /oldboy/blank.txt
oldboy oldboy
oldboy
alex
lidao996
究极:
^ *$理解
^
^ +
[root@oldboyedu /oldboy]# egrep -v '^ *$' /oldboy/blank.txt
oldboy oldboy
oldboy
alex
lidao996
egrep -n "[0-9]+|[a-Z]+" 1.cc
[0-9]+ 连续数字
[a-Z]+ 连续的字母(大小写)
cat file.txt|grep -v "^"
cat file.txt|grep -v "^$" ××××× 脱裤子放P
grep -v '^$' file.txt
1个英文的字符 占1个字节
1KB=1024字节
1MB=1024KB
1GB=1024MB=1024^3字节
sed 过滤 替换 修改文件内容 增删改查
-n 取消默认输出
-I 修改文件内容 -i.bak 修改之前进行备份
-r 支持扩展正则 只支持基础正则
-e 多次编辑
-l 只显示文件名
执行过程:
[https://www.processon.com/view/link/5bea32c5e4b0ad314e894f53] sed命令执行过程
sed -n '/102/,/104/p' maav.txt / /,/ / 里的内容表示一个范围
sed命令的后向引用或反向引用
sed -r ‘s#( )#\1#g’
核心:先保护,后使用
先把需要的内容通过()括起来,然后在后面通过\数字 进行使用。
[root@CentOS-F/tmp]# echo {1..10}|sed -r 's#([0-9]+)#<\1>#g'
<1> <2> <3> <4> <5> <6> <7> <8> <9> <10>
题目1:
cp /etc/passwd /oldboy/
把 /oldboy/passwd 第1列和最后一列调换位置
sed -r 's#(^.)(:x.:)(.*$)#\3\2\1#g' oldboy.txt
题目2:取出里面的644或0644 sed后向引用方法
[root@oldboyedu /oldboy]# stat /etc/hosts
File: ‘/etc/hosts’
Size: 158 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 16829878 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-10-26 03:47:16.874000256 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2019-03-04 11:15:49.426692303 +0800
Birth: -
stat /etc/hosts|sed -n '4p'|sed -r 's#^.(([0-9]+)/.$#\1#g'
stat /etc/hosts|sed -n '4p'|sed -r 's#^.(0(.)/-.*$#\1#g'
课后:
1.三剑客习题
https://www.jianshu.com/p/61d8883719ac
2.每个人找出2-3个三剑客题目
awk 过滤****取列****统计计算
网友评论