如何在忽略标点符号的情况下对字符串进行grep?

如何在忽略标点符号的情况下对字符串进行grep?,grep,Grep,我有一个大于100MB的公司名称及其代码文本文件,如下所示: ... ... ABC Sys, INC.:0001111111: ABC Systems INC:0001111112: ... ... 我有一个输入的公司名称abc sys inc(sys后面没有逗号,inc后面没有句号) 我想使用搜索字符串ABC Sys Inc对公司名为ABC Sys,Inc.的行进行grep grep -i "abc sys inc" my_list_file.txt 不返回任何行,而

我有一个大于100MB的公司名称及其代码文本文件,如下所示:

...  
...  
ABC Sys, INC.:0001111111:  
ABC Systems INC:0001111112:  
...  
...
我有一个输入的公司名称abc sys inc(sys后面没有逗号,inc后面没有句号)

我想使用搜索字符串
ABC Sys Inc
对公司名为ABC Sys,Inc.的行进行grep

grep -i "abc sys inc" my_list_file.txt
不返回任何行,而我希望它返回第一行

grep -i "abc sys" my_list_file.txt

返回两行

您可以使用与1个或多个标点符号/空白字符匹配的模式替换每个空格。因此,您可以使用
[:space:[:punct:]\+
/
[:space:[:punct:]\{1,\}
[^[:alnum:]\+
/
[^[:alnum:]\{1,\}
。如果使用POSIX ERE表达式,则
\+
\{1,\}
可以仅作为
+
编写

search="abc sys inc";
grep -E -i "${search// /[^[:alnum:]]+}" file > outfile
见:


你至少需要像“
grep-i”abc[[:space:][:punt:][]sys[:space:][:punt:][]inc”my\u list\u file.txt
或“
grep-E-i”abc[^[:alnum:][]sys[^[:alnum:][]inc”my\u list\u file.txt
使用
cat my\u list\u file.txt
代替“$s”为我工作。注意这里,因为我的问题是关于grep>100MB文件的。@Sri
grep
接受模式参数后的文件路径,你永远不需要
cat
grep
啊,人们往往会错过修补复杂文件的基本功能。因此,只需
my_list_file.txt
来代替

s='...  
ABC Sys, INC.:0001111111:  
ABC Systems INC:0001111112:  
...  '

search="abc sys inc";
grep -E -i "${search// /[^[:alnum:]]+}" <<< "$s"  
ABC Sys, INC.:0001111111: