Linux grep命令的使用场景

Linux grep命令的使用场景grep命令的语法:当grep的命令参数为文件时: grep 。如果把grep理解为find,那就是: find a string

欢迎大家来到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世界,在知识的湖畔探索吧!

Linux grep命令的使用场景

grep常规输出模式

选项-v: 输出不含指定字符串的全部行

欢迎大家来到IT世界,在知识的湖畔探索吧!root@hgdm:~/examples# cat grep_data.txt 
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。

# 反向操作,输出不含独字的全部行
root@hgdm:~/examples# grep -v '独' grep_data.txt 
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。
Linux grep命令的使用场景

grep -v反选操作

选项-c: 输出有几行

root@hgdm:~/examples# cat grep_data.txt 
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。

# 含独字的行总共有4行,所以输出4
root@hgdm:~/examples# grep -c '独' -n grep_data.txt 
4
Linux grep命令的使用场景

grep -c 输出行数

选项-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
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
Linux grep命令的使用场景

grep -lR -Z

选项-o: 仅仅输出指定的字符串

root@hgdm:~/examples# cat grep_data.txt 
孤舟蓑笠翁,独钓寒江雪。
花间一壶酒,独酌无相亲。
细草微风岸,危樯独夜舟。
落叶他乡树,寒灯独夜人。
海内存知己,天涯若比邻。
烽火连三月,家书抵万金。
红豆生南国,春来发几枝。

# 只输出文件中的全部独字,而不输出包含独字的行
root@hgdm:~/examples# grep -o '独' grep_data.txt 
独
独
独
独
Linux grep命令的使用场景

grep -o

当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:落叶他乡树,寒灯独夜人。
Linux grep命令的使用场景

当grep的参数是文件和stdin组合时

当需找两个或两个以上的指定字符串时

上面的例子,都是在文件或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:野旷天低树,江清月近人。
Linux grep命令的使用场景

grep -e指定多个待找字符串

当待找的指定字符串是一个正则表达式时

当需要完全使用正则表达式时,使用grep -Eegrep命令。

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
Linux grep命令的使用场景

grep -E和egrep

当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:细草微风岸,危樯独夜舟。
Linux 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
Linux grep命令的使用场景

ls和grep组合只列出目录或文件

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/30080.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信