Unix命令查找字符串集交点或异常值? 是否存在与相同的UNIX命令? sort | uniq
查找字符串集交点或“异常值” 一个示例应用程序:我有一个html模板列表,其中一些有{%load i18n%}字符串,其他没有。我想知道哪些文件没有 编辑:grep-L解决了上述问题 这个怎么样: 文件1:Unix命令查找字符串集交点或异常值? 是否存在与相同的UNIX命令? sort | uniq,unix,grep,set,Unix,Grep,Set,查找字符串集交点或“异常值” 一个示例应用程序:我有一个html模板列表,其中一些有{%load i18n%}字符串,其他没有。我想知道哪些文件没有 编辑:grep-L解决了上述问题 这个怎么样: 文件1: mom dad bob 文件2: dad %相交文件1文件2 dad mom bob %左唯一文件1文件2 dad mom bob 也许我误解了这个问题,但是为什么不使用grep来查找字符串(使用-L选项让它打印没有字符串的文件名) 换句话说 grep -L "{% load i
mom
dad
bob
文件2:
dad
%相交文件1文件2
dad
mom
bob
%左唯一文件1文件2
dad
mom
bob
也许我误解了这个问题,但是为什么不使用grep来查找字符串(使用-L选项让它打印没有字符串的文件名) 换句话说
grep -L "{% load i18n %}" file1 file2 file3 ... etc
或者根据需要使用通配符作为文件名。来自man
grep
-L, --files-without-match
抑制正常输出;而是打印
从中获取的每个输入文件的名称
通常不会有输出
印刷的。扫描将停止
第一场比赛
因此,如果您的模板是所需的.html文件:
grep -L '{% load i18n %}' *.html
相交:
# sort file1 file2 | uniq -d
dad
左唯一:
# sort file1 file2 | uniq -u
bob
mom
看起来
grep-L
解决了海报的真正问题,但是对于实际问题,找到两组字符串的交集,您可能需要查看“comm”命令。例如,如果file1
和file2
都包含已排序的单词列表,每行一个单词,则
$ comm -12 file1 file2
将生成两个文件共有的单词。更一般地说,给定已排序的输入文件file1
和file2
,命令
$ comm file1 file2
生成三列输出
-N
选项抑制输出中的列N
。因此,上面的命令comm-12file1file2将取消第1列和第2列,只保留两个文件共有的单词。来自:
两个(未排序)文件之间的交集:
文件2中不在文件1中的行:
grep -Fxv -f file1 file2
说明:
选项告诉grep从文件中读取要查找的模式。这意味着它对file1中的每一行执行file2搜索-f
选项告诉grep将搜索词视为固定字符串,而不是模式,这样-F
将只匹配a.c
,而不匹配a.c
abc
选项告诉grep进行整行搜索,以便file1中的“foo”与file2中的“foobar”不匹配-x
- 默认情况下,grep将仅显示匹配的线,从而为您提供交点。
选项告诉grep仅显示不匹配的行,从而为您提供file2特有的行-v
comm -12 <(cat file1 | sort | uniq) <(cat file2 | sort | uniq)
comm <(cat file1 | sort | uniq) <(cat file2 | sort | uniq)
comm-12为了更快地搜索,我也会使用-F,因为它只是一个固定的字符串。那么设置交叉点呢?在比较之前不要忘记对文件进行排序。是的,结果让我大吃一惊。我确实在上面提到过,每个文件都包含一个“已排序的单词列表”,但它可能不会直接跳到您的面前。intersect有效,但left unique无效。它显示整个集合中的唯一值,而不是第一个集合中唯一的值。