使grep打印缺少的查询
我正在使用grep-f,并希望使grep打印文件1中的行在文件2中丢失: 文件1:使grep打印缺少的查询,grep,Grep,我正在使用grep-f,并希望使grep打印文件1中的行在文件2中丢失: 文件1: hello my name is bernardo 文件2: hello 1 my 2 name 3 is 4 理想输出: hello 1 my 2 name 3 is 4 bernardo 这将打印文件2中不在文件1中的行: fgrep -F -x -v -f file1 file2 -F表示将输入视为固定字符串而不是模式,-x表示匹配整行,-v表示打印不匹配的行而不是匹配的行,-F file1使用fi
hello
my
name
is
bernardo
文件2:
hello 1
my 2
name 3
is 4
理想输出:
hello 1
my 2
name 3
is 4
bernardo
这将打印文件2中不在文件1中的行:
fgrep -F -x -v -f file1 file2
-F表示将输入视为固定字符串而不是模式,-x表示匹配整行,-v表示打印不匹配的行而不是匹配的行,-F file1使用file1作为模式列表
您的问题有点不清楚,但我猜您希望在一个或另一个文件中显示所有行,但不是同时在两个文件中显示。有几种方法可以做到这一点。一是做两个greps:
fgrep -F -x -v -f file2 file1; fgrep -F -x -v -f file1 file2
另一种方法是排序,如果输出中的行的顺序无关紧要
并使用comm:
sort file1 -o sortfile1
sort file2 -o sortfile2
comm -3 sortfile1 sortfile2
这将打印文件2中不在文件1中的行:
fgrep -F -x -v -f file1 file2
-F表示将输入视为固定字符串而不是模式,-x表示匹配整行,-v表示打印不匹配的行而不是匹配的行,-F file1使用file1作为模式列表
您的问题有点不清楚,但我猜您希望在一个或另一个文件中显示所有行,但不是同时在两个文件中显示。有几种方法可以做到这一点。一是做两个greps:
fgrep -F -x -v -f file2 file1; fgrep -F -x -v -f file1 file2
另一种方法是排序,如果输出中的行的顺序无关紧要
并使用comm:
sort file1 -o sortfile1
sort file2 -o sortfile2
comm -3 sortfile1 sortfile2
这样做的目的是按file1中的模式打印file2中的所有匹配项,然后打印file1中与file2中的文件不匹配的所有行。第二部分工作如下:
返回file和file2之间的匹配,但只返回行的匹配部分李>grep-o-f file1 file2
在匹配的部分前面加上sed s'/^\(.*)$/-e“\1”/g'|“\1”/g'| tr'\n'
,将它们括在双引号中,并用空格替换由-e
命令打印的换行符。这将构建一个格式为grep-f
,这就是-e“[pattern1]”-e“[pattern2]”的字符串,…
用于多模式匹配的内容。引号(希望)确保模式中的空格不会成为问题李>grep
生成并执行命令xargs grep-v file1
。结果是file1中的所有行在第一个命令的输出中(因此在file2中)都不匹配grep-v file1[通过管道传输到xargs的内容]
sh-4.3$ cat file1
hello
my
name
is
bernardo
sh-4.3$ cat file2
hello 1
my 2
name 3
is 4
sh-4.3$ grep -f file1 file2 && grep -o -f file1 file2 | sed s'/^\(.*\)$/-e "\1"/g' | tr '\n' ' ' | xargs grep -v file1
hello 1
my 2
name 3
is 4
bernardo
这样做的目的是按file1中的模式打印file2中的所有匹配项,然后打印file1中与file2中的文件不匹配的所有行。第二部分工作如下:
返回file和file2之间的匹配,但只返回行的匹配部分李>grep-o-f file1 file2
在匹配的部分前面加上sed s'/^\(.*)$/-e“\1”/g'|“\1”/g'| tr'\n'
,将它们括在双引号中,并用空格替换由-e
命令打印的换行符。这将构建一个格式为grep-f
,这就是-e“[pattern1]”-e“[pattern2]”的字符串,…
用于多模式匹配的内容。引号(希望)确保模式中的空格不会成为问题李>grep
生成并执行命令xargs grep-v file1
。结果是file1中的所有行在第一个命令的输出中(因此在file2中)都不匹配grep-v file1[通过管道传输到xargs的内容]
sh-4.3$ cat file1
hello
my
name
is
bernardo
sh-4.3$ cat file2
hello 1
my 2
name 3
is 4
sh-4.3$ grep -f file1 file2 && grep -o -f file1 file2 | sed s'/^\(.*\)$/-e "\1"/g' | tr '\n' ' ' | xargs grep -v file1
hello 1
my 2
name 3
is 4
bernardo
据我所知,OP希望打印
file2
中与file1
中的行匹配的行,以及file1
中与file2
中不匹配的行,OP希望打印file2
中与file1
中的行相匹配的行,以及file1
中与file2
中不匹配的行。请分享您迄今为止所做/尝试的工作!请分享您迄今为止所做/尝试的内容!