如何从一个文件读取带有特殊字符的字符串到grep

时间:2017-06-30 14:30:00

标签: bash shell grep

我正在尝试的是,从一个文件中读取所有字符串,其中也包含特殊字符,即。 ,/ \'“等 并且我正在使用grep以上字符串来执行一个文件的cat来检查发生但是它不适用于某些特殊字符串。

FILE1.TXT

Error:'abcd' not found; Try Again
Error:load() loading provider library version 3.5(r182) By <info@xyz.com>
Warning: Connection to group 'xyz-xyz'

Filename.log

2017-06-19 06:50:28 Error:'abcd' not found; Try Again
2017-06-19 06:50:28 Error:load() loading provider library version 3.5(r182) By <info@xyz.com>
2017-06-19 06:50:28 Warning: Connection to group 'xyz-xyz', peer '00.00.01.01:2200,00.00.01.01:2200,00.00.01.01:2200' 

内部脚本test1.sh

while read STRING

do

cat Filename.log | grep -i -F "$STRING"

done<file1.txt

但它将其视为

grep -i -F 'Error:'\''abcd'\'' not found; Try Again'

并没有显示任何正确的输出。

那么我们如何忽略其中的所有特殊字符? 没有任何特殊字符的其他字符串工作正常。

由于

2 个答案:

答案 0 :(得分:0)

您可以使用tr并替换所有标点字符(如果不需要)

...
while read STRING
do
cat Filename.log | tr "[:punct:]" " " | grep -i -F "$STRING"
done<file1.txt

| tr "\\\',/" " "其他角色。

答案 1 :(得分:0)

这就是你所追求的,使用

  

-f FILE, - file = FILE             从FILE获取模式,每行一个。空文件包含零模式,因此不匹配任何内容。 (-f是             由POSIX指定。)

$ cat file1.txt 
Error:'abcd' not found; Try Again
Error:load() loading provider library version 3.5(r182) By <info@xyz.com>
Warning: Connection to group 'xyz-xyz'

$ cat Filename.log 
2017-06-19 06:50:28 Error:'abcd' not found; Try Again
2017-06-19 06:50:28 Error:load() loading provider library version 3.5(r182) By <info@xyz.com>
2017-06-19 06:50:28 Warning: Connection to group 'xyz-xyz', peer '00.00.01.01:2200,00.00.01.01:2200,00.00.01.01:2200'

$ grep -i -f file1.txt Filename.log 
2017-06-19 06:50:28 Error:'abcd' not found; Try Again
2017-06-19 06:50:28 Error:load() loading provider library version 3.5(r182) By <info@xyz.com>
2017-06-19 06:50:28 Warning: Connection to group 'xyz-xyz', peer '00.00.01.01:2200,00.00.01.01:2200,00.00.01.01:2200'

enter image description here