在定界文件中搜索包含一组可能的字符串的行,而不显示包含string-somethingelse

时间:2018-07-11 18:54:24

标签: bash grep comm

grep -f strings.txt matrixToBeSearched.txt

如果我的字符串是abc,并且delimitedFile.txt的行是abc-def,即使我使用-w选项,也会将其视为匹配项。我只需要查看包含abc的行即可。

我的矩阵很大,而且我的字符串列表很大,所以我确实需要使用-f选项而不是-e

在以下定界文件中搜索字符串abc

|abc    |123|456  
|abc-def|789|123 
|abc    |456|789 

输出

|abc    |123|456  
|abc    |456|789 

3 个答案:

答案 0 :(得分:1)

给出:

$ cat file
|abc    |123|456  
|abc-def|789|123 
|abc    |456|789 
|def    |012|345

为此,您可以使用awk来获取给定字符串的精确匹配项:

$ awk -F'[| ]' -v tgt='abc' '$2==tgt {print $0}' file
|abc    |123|456  
|abc    |456|789

由于{print $0}是默认操作(如Ed Morton所指出),因此您可以简化为:

$ awk -F'[| ]' -v tgt='abc' '$2==tgt' file

然后,如果要使用固定字符串文件:

$ cat tgts
abc
def

您现在可以使用以下awk

$ awk -F'[| ]'  'FNR==NR{tgt[$1]; next} # read the fixed strings 
                 $2 in tgt' tgts file
|abc    |123|456  
|abc    |456|789 
|def    |012|345

答案 1 :(得分:0)

问题被修改为更清楚。

您所需要的可以

$ grep -Pf strings.txt matrixToBeSearched.txt

其中

$ cat strings.txt
\|abc\s*\|

例如,

$ cat matrixToBeSearched.txt
|abc    |123|456  
|abc-def|789|123 
|abc    |456|789 
$ grep -Pf strings.txt matrixToBeSearched.txt
|abc    |123|456  
|abc    |456|789 

在这里,我将-P参数用于Perl正则表达式。

您可以修改strings.txt的内容,以获得更好,更强大的grep方法。

答案 2 :(得分:0)

-w认为-是一个单词分隔符,因为它不是bash中变量名的一部分,即var=1; echo $var-iable会产生“ 1-iable”

您可以编辑编辑字符串列表,以使核心词“ abc”与仅|并与[| ]abc[| ]匹配。或者,您可以按照@David的建议进行操作,并使用abc[^-]来避免出现破折号。

没有grep标志可让strings.txt中的“ abc”匹配|abc |,但不能匹配|abc-def |。您必须编辑字符串列表才能获得此功能。