王文卓
课堂笔记
三剑客:
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 上下
-r
-l (小写字母L)
-P ??
sed 过滤 替换 修改文件内容 增删改查
awk 过滤 取列 统计计算
三剑客
grep
sed
awk
Unix中在当前目录下所有.cc 的文件中找到含有“asiainfo”内容的文件,命令为_______
找出当前目录下包含127.0.0.1关键字的文件?
写出查询file.txt以abc结尾的行
grep 'abc$' file.txt
写出删除abc.txt文件中的空行
mkdir -p /oldboy/alex/
for n in {1..5}
do
echo "oldboy 127.0.0.1" >/oldboy/$n.cc
echo "oldboy 127.0.0.1" >/oldboy/alex/$n.cc
done
Unix中在当前目录下所有.cc 的文件中 找到含有“asiainfo”内容的文件,命令为_______
find
find .
find /oldboy/ -type f -name "*.cc" |xargs grep 'asiainfo'
grep 'asiainfo' /oldboy/*.cc
#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
找出当前目录下包含127.0.0.1关键字的文件?
grep -r '127.0.0.1' .
find
[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
写出查询file.txt以abc结尾的行
写出删除abc.txt文件中的空行
基础
[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
究极:
^ *$理解
^$ 当*表示0次的时候 就相当于是 ^$
^ +$ 当*表示1次及1次以上 ^ +$
[root@oldboyedu /oldboy]# egrep -v '^ *$' /oldboy/blank.txt
oldboy oldboy
oldboy
alex
lidao996
待解释方法:
grep "!^$" abc.txt
! find sed awk中表示取反
egrep -v "(^$| )" blank
egrep -v "(^$|^ $)" blank
egrep -n "[0-z]" oldboy.txt
'[0-Z]'
[root@oldboyedu /oldboy]# egrep -n "[0-z]" blank.txt
1:oldboy oldboy
4: oldboy
6:alex
7:lidao996
egrep "^[^$]" blank.txt
过滤出不是以$符号开头的行
egrep "[^$]" blank.txt
[root@oldboyedu /oldboy]# egrep "[^$]" blank.txt
oldboy oldboy
oldboy
alex
lidao996
$$$$$$####oldboyedu.com
[root@oldboyedu /oldboy]# #排除$符号
egrep -n "[0-9]+|[a-Z]+" 1.cc
[0-9]+ 连续数字
[a-Z]+ 连续的字母(大小写)
cat file.txt|grep -v "^$"|grep -v "^ +$"
cat file.txt|grep -v "^$" ××××× 脱裤子方P
grep -v '^$' file.txt
1个英文的字符 占1个字节
1KB=1024字节
1MB=1024KB
1GB=1024MB=1024^3字节
sed "/[ ]/d" 555
sed "/^$/d" 555
三剑客老二-sed命令
https://www.processon.com/view/link/5bea32c5e4b0ad314e894f53
老男孩教育-sed命令执行过程
[root@oldboyedu /oldboy]# sed -n '1,5p' maav.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[root@oldboyedu /oldboy]# sed -n '/101/,/105/p' maav.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
sed命令的后向应用或反向引用 :
sed -r 's#()#\1#g'
核心: 先保护,后使用
先把你要的内容通过()括起来,然后在后面通过\数字 进行使用。
[root@oldboyedu /oldboy]# 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列和最后一列调换位置
题目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: -
题目1:
cp /etc/passwd /oldboy/
把 /oldboy/passwd 第1列和最后一列调换位置
[root@oldboyedu /oldboy]# sed -r 's#(^.*)(:x.*:)(.*$)#\3\2\1#g' /oldboy/passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
/bin/sync:x:5:0:sync:/sbin:sync
/sbin/shutdown:x:6:0:shutdown:/sbin:shutdown
/sbin/halt:x:7:0:halt:/sbin:halt
/sbin/nologin:x:8:12:mail:/var/spool/mail:mail
/sbin/nologin:x:11:0:operator:/root:operator
老男孩教育-sed后向引用调换/etc/passwd第1列和最后一列
https://www.processon.com/view/link/5cab2621e4b087434367338b
题目2:取出里面的644或0644 sed后向引用方法
老男孩IT教育出品-sed命令反向引用取出/etc/hosts文件权限
https://www.processon.com/view/link/59fbc9c0e4b0f84f8976523