0
grep -f strings.txt matrixToBeSearched.txt

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

我的矩阵很大,字符串列表也很大,所以我真的需要使用-foption 而不是-e.

在以下分隔文件中搜索字符串 abc

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

输出

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

3 回答 3

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
于 2018-07-11T19:49:45.747 回答
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 

这里我使用-PPerl 正则表达式的参数。

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

于 2018-07-11T19:18:57.073 回答
0

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

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

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

于 2018-07-11T19:20:00.213 回答