使用grep的结果不同

时间:2012-12-05 13:50:59

标签: linux shell unix grep

我有以下两个文件:

$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 个答案:

答案 0 :(得分:4)

尝试引用您要找的内容:

while read line
do
  grep -F "$line" file1
done < file2

答案 1 :(得分:2)

你需要引用模式。

但是,我怀疑你实际应该做的是通过file2开关直接提供-f字符串grep:

grep -Ff file2 file1

然后file2中的任何固定字符串都会被file1格式化。

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

答案 2 :(得分:0)

在grep

的第一个参数中添加双引号
grep "$line" file1

OR

grep "${line}" file1

答案 3 :(得分:0)

使用引号并删除useless use of cat

while read line
do
  grep -F "$line" file1
done < file2