欢迎大家来到IT世界,在知识的湖畔探索吧!
man grep得到下列信息
- 正常输出: 输出含有指定字符串的全部行。
- -v, –invert-match: 反向操作,输出不含有指定字符串的全部行。
- -c, –count: 禁止正常输出;输出含有指定字符串的行有几行。当与-v, –invert-match选项配合使用时,输出不含指定字符串的行有几行。
- -o, –only-matching: 只输出全部的指定字符串,而不输出含有指定字符串的全部行。
- -l, –files-with-matches: 禁止正常输出;输出内容含指定字符串的全部文件的名称。
- -L, –files-without-match: 禁止正常输出;输出内容不含指定字符串的全部文件的名称。-l与-L是相反的。
- -Z: 一般结合-l选项使用。若grep -l不使用-Z,则输出的多个文件名之间是以换行符分隔开;若grep -l使用-Z,则输出的多个文件名之间是以null字符分隔隔。
- -n, –line-number: 显示行号。
- -i, –ignore-case: 模式(pattern)和标准输出(stdout)里不区分字母大小写。
grep命令的语法:
- 当grep的命令参数为文件时: grep [选项1] [选项2] [选项n] [一个待找的字符串] [参数1(文件1)] [参数2(文件2)] [参数n(文件n)]。如果把grep理解为find,那就是: find a string inside a file or more files.
- 当grep的命令参数为目录时: grep -r或-R [选项1] [选项2] [选项n] [一个待找的字符串] [参数1(目录1)] [参数2(目录2)] [参数n(目录n)]。
find命令和grep命令的区别
find命令是在文件名称或目录名称里找指定的字符串。一般,find命令的输出结果是找到的文件名或目录名。
grep命令是在文件内容或stdin里找指定的字符串。然而,grep的输出结果却不一定是找到的字符串,而是根据不同的命令选项有不同的输出,例如,正常输出模式时会输出含指定字符串的全部行,加了-l命令选项会输出含指定字符串的全部文件,等等。
正常输出模式: 输出含指定字符串的全部行
root@hgdm:~/examples# cat grep_data.txt
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。
# 输出含独字的全部行
root@hgdm:~/examples# grep '独' grep_data.txt
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
欢迎大家来到IT世界,在知识的湖畔探索吧!
选项-v: 输出不含指定字符串的全部行
欢迎大家来到IT世界,在知识的湖畔探索吧!root@hgdm:~/examples# cat grep_data.txt
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。
# 反向操作,输出不含独字的全部行
root@hgdm:~/examples# grep -v '独' grep_data.txt
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。
选项-c: 输出有几行
root@hgdm:~/examples# cat grep_data.txt
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。
# 含独字的行总共有4行,所以输出4
root@hgdm:~/examples# grep -c '独' -n grep_data.txt
4
选项-l: 输出内容含指定字符串的全部文件
欢迎大家来到IT世界,在知识的湖畔探索吧!root@hgdm:~/examples/temp# cat data1.txt
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
root@hgdm:~/examples/temp# cat data2.txt
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
# 找到当前目录下含独字的全部文件的名称
root@hgdm:~/examples/temp# grep -lR '独' ./
./data1.txt
./data2.txt
root@hgdm:~/examples/temp# grep -lR -Z '独' ./ | xargs -0 cat
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
选项-o: 仅仅输出指定的字符串
root@hgdm:~/examples# cat grep_data.txt
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。
# 只输出文件中的全部独字,而不输出包含独字的行
root@hgdm:~/examples# grep -o '独' grep_data.txt
独
独
独
独
当grep的参数是文件和stdin组合时
root@hgdm:~/examples# echo -e '独在异乡为异客\n独善其身'
独在异乡为异客
独善其身
root@hgdm:~/examples# cat grep_data.txt
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。
root@hgdm:~/examples# echo -e '独在异乡为异客\n独善其身' | grep '独' - grep_data.txt
(standard input):独在异乡为异客
(standard input):独善其身
grep_data.txt:孤舟蓑笠翁,独钓寒江雪。
grep_data.txt:花间一壶酒,独酌无相亲。
grep_data.txt:细草微风岸,危樯独夜舟。
grep_data.txt:落叶他乡树,寒灯独夜人。
当需找两个或两个以上的指定字符串时
上面的例子,都是在文件或stdin里查找一个指定字符串,有时候,需要在文件或stdin里查找两个或两个以上指定字符串。
语法为: grep -e “待找字符串1” -e “待找字符串2” -e “待找字符串3”
root@hgdm:~/ls_data# cat file1.txt
孤舟蓑笠翁,独钓寒江雪。
海内存知己,天涯若比邻。
root@hgdm:~/ls_data# cat file2.txt
花间一壶酒,独酌无相亲。
烽火连三月,家书抵万金。
root@hgdm:~/ls_data# cat file3.txt
细草微风岸,危樯独夜舟。
野旷天低树,江清月近人。
root@hgdm:~/ls_data# grep -e '孤舟' -e '一壶酒' -e '野旷' -e '天涯' file1.txt file2.txt file3.txt
file1.txt:孤舟蓑笠翁,独钓寒江雪。
file1.txt:海内存知己,天涯若比邻。
file2.txt:花间一壶酒,独酌无相亲。
file3.txt:野旷天低树,江清月近人。
当待找的指定字符串是一个正则表达式时
当需要完全使用正则表达式时,使用grep -E或egrep命令。
root@hgdm:~/ls_data# echo -e "孤舟蓑笠翁\n独钓寒江雪\n2022 The best"
孤舟蓑笠翁
独钓寒江雪
2022 The best
root@hgdm:~/ls_data# echo -e "孤舟蓑笠翁\n独钓寒江雪\n2022 The best" | grep -E '[0-9]+'
2022 The best
root@hgdm:~/ls_data# echo -e "孤舟蓑笠翁\n独钓寒江雪\n2022 The best" | egrep '[0-9]+'
2022 The best
当grep的参数是含有通配符*的文件名时
root@hgdm:~/ls_data# ls
dir1 dir2 dir3 file1.txt file2.txt file3.txt
root@hgdm:~/ls_data# cat file*
孤舟蓑笠翁,独钓寒江雪。
海内存知己,天涯若比邻。
花间一壶酒,独酌无相亲。
烽火连三月,家书抵万金。
细草微风岸,危樯独夜舟。
野旷天低树,江清月近人。
# *file*匹配到file1.txt file2.txt file3.txt
root@hgdm:~/ls_data# grep '独' *file*
file1.txt:孤舟蓑笠翁,独钓寒江雪。
file2.txt:花间一壶酒,独酌无相亲。
file3.txt:细草微风岸,危樯独夜舟。
如何让ls命令只列出目录或文件
# 只列出目录
ls -l | grep '^d'
# 只列出文件
ls -l | grep '^-'
上述命令的执行结果如下
root@hgdm:~/ls_data# ls -l
total 12
drwxr-xr-x 2 root root 4096 Apr 4 14:10 dir1
drwxr-xr-x 2 root root 4096 Apr 4 14:10 dir2
drwxr-xr-x 2 root root 4096 Apr 4 14:10 dir3
-rw-r--r-- 1 root root 0 Apr 4 14:09 file1.txt
-rw-r--r-- 1 root root 0 Apr 4 14:09 file2.txt
-rw-r--r-- 1 root root 0 Apr 4 14:09 file3.txt
root@hgdm:~/ls_data# ls -l | grep '^d'
drwxr-xr-x 2 root root 4096 Apr 4 14:10 dir1
drwxr-xr-x 2 root root 4096 Apr 4 14:10 dir2
drwxr-xr-x 2 root root 4096 Apr 4 14:10 dir3
root@hgdm:~/ls_data# ls -l | grep '^-'
-rw-r--r-- 1 root root 0 Apr 4 14:09 file1.txt
-rw-r--r-- 1 root root 0 Apr 4 14:09 file2.txt
-rw-r--r-- 1 root root 0 Apr 4 14:09 file3.txt
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/30080.html