【问题标题】:how to read a string with special charcters from one file to grep如何从一个文件中读取带有特殊字符的字符串到 grep
【发布时间】:2017-06-30 14:29:59
【问题描述】:

我正在尝试的是,从一个文件中读取所有字符串,其中还包括特殊字符,即。 ,/\'“ ETC。 我正在用 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'

文件名.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'

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

那么我们怎样才能忽略 this 里面的所有特殊字符呢? 其他没有任何特殊字符的字符串都可以正常工作。

谢谢

【问题讨论】:

  • 特殊字符包括:'()@#$? ~
  • @anubhava,它是一个错误日志文件,通常包含错误消息,例如上面一个“错误:'abcd'未找到;再试一次”,日期和时间,其他包括IP地址和电子邮件ID。唯一关心的是我要过滤的字符串中的特殊字符。
  • 试试grep -i -F file1.txt Filename.log 问题很不清楚。请提供示例输入和预期输出。
  • 尝试使用trcat Filename.log | tr "[:punct:]" " " | grep -i -F "$STRING"
  • 寻找灵感herehere

标签: bash shell grep


【解决方案1】:

您可以使用tr 并在不需要时替换所有标点符号

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

| tr "\\\',/" " " 为其他字符。

【讨论】:

  • 这是一种方法,但我们将再次依赖我们在脚本中传递的特殊字符。我们有什么方法可以在双引号“ ...”下传递整个字符串
  • 可以替换| tr "'" "\'"和转义符号' - Error:\'abcd\' not found;
【解决方案2】:

这是你所追求的,使用

-f 文件,--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'

【讨论】:

  • 感谢 Fredrik,它在上述情况下工作得很好,但有一种情况对我不起作用,如果 file1.txt 字符串以任何特殊字符开头.. 即。 [错误]:'abcd' not founf;........
  • 再次,为我工作 (tm),我正在使用 grep (GNU grep) 2.20
猜你喜欢
  • 1970-01-01
  • 2020-05-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多