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
答案 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 |
。您必须编辑字符串列表才能获得此功能。