1

我有以下两个文件:

$cat file1
"2020051576BPI";"TS.1.BPI.20121129120000.005.txt";"Error";"'OF_USM_DBTI0000029'/'CO_SERVICE_SVCID11066'/'CO_FA_SC_600224'/. appears less times in the Input File (0), but should appear at least 1 times";""
"2019707951BPI";"TS.1.BPI.20121129120000.014.txt";"Error";"'OF_USM_DBTI0000029'/'CO_SERVICE_SVCID11066'/'CO_FA_SC_600224'/. appears less times in the Input File (0), but should appear at least 1 times";""
"Failed to parse string. Error msg: Failed to parse 'Fatal Error at file (buffer) "", line 366, column 17   Message: Expected whitespace'"

$cat file2
"'OF_USM_DBTI0000029'/'CO_SERVICE_SVCID11066'/'CO_FA_SC_600224'/. appears less times in the Input File (0), but should appear at least 1 times"
"Failed to parse string. Error msg: Failed to parse 'Fatal Error at file (buffer) "", line 366, column 17   Message: Expected whitespace'"

我正在阅读 file2 并使用 grep 我在 file1(大文件)中找到行。我这样做如下:

$cat file2|while read line
do
grep $line file1
done

但我得到的结果如下:

grep: can't open appears
grep: can't open less
grep: can't open times
grep: can't open in
grep: can't open the
grep: can't open Input
grep: can't open File
grep: can't open (0),
grep: can't open but
grep: can't open should
grep: can't open appear
grep: can't open at
grep: can't open least
grep: can't open 1
grep: can't open times"
USM_GRPSET_BPI_ERROR_20121130_171648.TXT:"2020051576BPI";"TS.1.BPI.20121129120000.005.txt";"Error";"'OF_USM_DBTI0000029'/'CO_SERVICE_SVCID11066'/'CO_FA_SC_600224'/. appears less times in the Input File (0), but should appear at least 1 times";""
USM_GRPSET_BPI_ERROR_20121130_171648.TXT:"2019707951BPI";"TS.1.BPI.20121129120000.014.txt";"Error";"'OF_USM_DBTI0000029'/'CO_SERVICE_SVCID11066'/'CO_FA_SC_600224'/. appears less times in the Input File (0), but should appear at least 1 times";""
grep: can't open to
grep: can't open parse
grep: can't open string.
grep: can't open Error
grep: can't open msg:
grep: can't open Failed
grep: can't open to
grep: can't open parse
grep: can't open 'Fatal
grep: can't open Error
grep: can't open at
grep: can't open file
grep: can't open (buffer)
grep: can't open "",
grep: can't open line
grep: can't open 366,
grep: can't open column
grep: can't open 17
grep: can't open Message:
grep: can't open Expected
grep: can't open whitespace'"
USM_GRPSET_BPI_ERROR_20121130_171648.TXT:"2019714006BPI";"TS.1.BPI.20121129120000.005.txt";"Error";"Failed to parse string. Error msg: Failed to parse 'Fatal Error at file (buffer) "", line 366, column 17   Message: Expected whitespace'";""
4

4 回答 4

4

尝试引用您要查找的内容:

while read line
do
  grep -F "$line" file1
done < file2
于 2012-12-05T13:53:01.323 回答
2

您需要引用该模式。

但是,我怀疑您实际上应该做的是将字符串file2直接提供给 grep 彻底-f切换:

grep -Ff file2 file1

然后任何固定的字符串file2都会从file1.

请注意,如果 的行file2是正则表达式,则应省略该-F开关。

于 2012-12-05T15:27:35.973 回答
0

grep的第一个参数加双引号

grep "$line" file1

或者

grep "${line}" file1
于 2012-12-05T13:53:24.293 回答
0

使用引号并放弃cat 的无用用法

while read line
do
  grep -F "$line" file1
done < file2 
于 2012-12-05T14:15:51.400 回答