您的位置:

grep去重

一、grep去重复

grep是文本搜索工具,可以用来查找文本行中是否包含指定的字符串。 如果要查找的文本文件很大,可能会出现许多重复的行。 此时,可以使用grep去重功能来删除重复项。

下面是一个示例文件example.txt,它包含多个内容相同的行。

$ cat example.txt
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.

使用以下命令可以删除example.txt中的重复行:

$ sort example.txt | uniq
This is a sample text file.
It contains some text.

sort命令将文件中的所有行排序,这样任何内容相同的行都会被排在一起,之后uniq命令会将重复行去除。

二、grep多重过滤

除了去重,grep还可以用于多重过滤。 当需要匹配两个条件或更多时,可以使用-e选项。

下面是一个示例文件example.txt,它包含多个包含“text”和“file”的行。

$ cat example.txt
This is a sample text file.
It contains some text.
This is a sample html file.
It contains some code.

使用以下命令可以返回包含“text”和“file”这两个关键字的行:

$ grep -e 'text' -e 'file' example.txt
This is a sample text file.
This is a sample html file.

grep -e选项允许我们同时指定多个匹配模式。

三、grep去重复项

与上述-sort | uniq命令不同,还可以使用awk命令实现去除文本文件中的重复行。

下面是一个示例文件example.txt,它包含多个内容相同的行。

$ cat example.txt
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.

使用以下命令可以删除example.txt中的重复行:

$ awk '!a[$0]++' example.txt
This is a sample text file.
It contains some text.

构建一个数组a来存储文件中的每一行,如果之前没有遇到过这行,此行被打印出来并在数组a中添加标记,否则则不被打印出来。

四、linux grep 去重

除了awk命令外,还可以使用unix命令去除文件中的重复行。

下面是一个示例文件example.txt,它包含多个内容相同的行。

$ cat example.txt
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.

使用以下命令可以删除example.txt中的重复行:

$ cat example.txt | sort | uniq
This is a sample text file.
It contains some text.

cat命令读取文件,sort命令按字母顺序对文件进行排序,uniq命令删除重复的行。

五、grep e

grep命令使用-e选项来指定多个匹配模式。 还可以使用正则表达式扩展选项来进一步扩展搜索功能。

下面是一个示例文件example.txt,它包含多个包含“text”和“file”的行。

$ cat example.txt
This is a sample text file.
It contains some text.
This is a sample html file.
It contains some code.

使用以下命令可以返回包含“text”或“file”这两个关键字的行:

$ grep -E 'text|file' example.txt
This is a sample text file.
It contains some text.
This is a sample html file.

grep -E选项启用正则表达式,并允许我们使用管道字符“|”来匹配多个模式。

六、grep查重

grep除了可以去重以外,还可以用来查找重复行。

下面是一个示例文件example.txt,它包含多个内容相同的行。

$ cat example.txt
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.

使用以下命令可以查找example.txt中的重复行:

$ sort example.txt | uniq -d
This is a sample text file.
It contains some text.

sort命令将文件中的所有行排序,-d选项告诉uniq只打印重复的行。

七、grep结果去重

有时,我们需要在处理文本数据时,去除重复的结果行。

下面是一个示例文件example.txt,它包含多个包含ip地址的行。

$ cat example.txt
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.1

使用以下命令可以在保留每个IP地址的同时去除重复结果:

$ grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' example.txt | sort | uniq
192.168.1.1
192.168.1.2
192.168.1.3

grep命令使用-o选项只打印匹配的字符串,-E选项启用正则表达式,以查找IP地址。 sort命令和uniq命令一起使用可以去除重复结果。

八、grep怎么用

grep命令的基本语法是:

$ grep <模式> <文件>

可以使用以下选项进一步扩展搜索功能:

  • -i:在搜索时忽略大小写。
  • -w:搜索整个单词而不是匹配到的字符。
  • -v:仅打印没有匹配的行。
  • -c:仅打印匹配模式的行数。
  • -n:每个匹配模式的行前面添加行号。

例如,要查找文件example.txt中包含“text”单词的行,并将它们的行号显示出来,可以使用以下命令:

$ grep -win 'text' example.txt

grep -w选项使搜索只匹配完整单词,-i选项忽略大小写,-n选项在每行前面加上行号。

九、grep命令去重

gre命令的另一个常见用途是去除文本文件中的重复行。

下面是一个示例文件example.txt,它包含多个内容相同的行。

$ cat example.txt
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.
This is a sample text file.
It contains some text.

使用以下命令可以删除example.txt中的重复行:

$ grep -v '^$' example.txt | sort | uniq
This is a sample text file.
It contains some text.

grep -v选项使用^$模式匹配所有空行,并将它们删除。 sort命令将文件中的所有行排序,uniq命令删除重复的行。

如上所述,grep命令不仅可以搜索文本文件中的数据,还可用于去重及多重过滤。它是一种灵活的工具,对于那些需要大量处理文本数据的开发者而言,学习和使用该命令可将效率得以极大提高。