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 发布于 2018-07-11 19:49:45
给予:
$ 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所指出的),所以可以简化为:
$ 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发布于 2018-07-11 19:18:57
这个问题被修改得更清楚了。
你需要的是
$ 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方法。
发布于 2018-07-11 19:20:00
-w认为-是一个单词分隔符,因为它不会是bash中变量名的一部分,也就是说,var=1; echo $var-iable将产生"1-iable“。
您可以编辑您的字符串列表,以匹配您的核心单词"abc“只使用|或在旁边与[| ]abc[| ]。或者,您可以按照“David”的建议来做,并使用abc[^-]来避免抓住破折号。
在strings.txt中没有一个grep标志可以让您的"abc“匹配|abc |,而不是|abc-def |。您必须编辑字符串列表才能获得此功能。
https://stackoverflow.com/questions/51292441
复制相似问题