Shell脚本 - 无法使用grep在文件中找到字符串

时间:2014-10-17 07:19:04

标签: shell awk grep

我遇到了一些我自己无法解决的奇怪问题。我有两个文件,内容如下:

FILE1.TXT

Butterscotch;lkt+4S7Yhzf/g
Sox;WrWMzN6HD
Table;K4yPIK+SFfTFs
tram;YaY3opP9ie
number;e/WwiF5aihUY
Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH

File2.txt

Butterscotch;lkt+4S7Yhzf/g
Sox;WrWMzN6HD
Table;K4yPIK+SFfTFs
tram;YaY3opP9ie
number;e/WwiF5aihUY

我需要找到这两个文件之间的差异,但仅针对分号之前的条目,因此我首先使用awk来获取这些条目:

awk 'BEGIN {FS=";"}; {print $1}' File1.txt > Output1.txt
awk 'BEGIN {FS=";"}; {print $1}' File2.txt > Output2.txt

新文件包含以下条目:

Output1.txt

Butterscotch
Sox
Table
tram
number
Buttler
wzahwahwah

Output2.txt

Butterscotch
Sox
Table
tram
number

然后我使用grep -Fxvf Output2.txt Output1.txt > Diff.txt打印出Output2.txt和Output1.txt之间的差异,所以我的文件如下所示:

Diff.txt

Buttler
wzahwahwah

现在是棘手的部分。我需要从 File1.txt 中找到并打印出来自 Diff.txt 条目的整行代码。我正在声明一个变量并做这样的事情:

variable=$(cat Diff.txt)
grep $variable Output1.txt > Delete.txt

所以对于这个例子,我应该得到这样的东西:

Delete.txt

Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH

但不幸的是我收到了错误:

grep: wzahwahwah: No such file or directory

文件 Delete.txt 而非所需数据包含:

/home/working/File1.txt:Buttler;Nsadlkt+4S7Yhz

所以它远非我需要得到的东西。我注意到当我从 File1.txt

中删除时
wzahwahwah;PYaY3opP9ieH

我没有错误,我想要的文件如下:

Buttler;Nsadlkt+4S7Yhz

为什么这不起作用?

2 个答案:

答案 0 :(得分:4)

而不是cat和后续grep使用此grep

grep -Ff Diff.txt File1.txt
Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH

答案 1 :(得分:2)

当你这样做时

variable=$(cat Diff.txt)
grep $variable Output1.txt > Delete.txt

变量扩展后,由于它没有引用,grep命令变为

grep Buttler wzahwahwah Output1.txt > Delete.txt

Grep仅使用 first 参数作为模式,所有后续args都是文件名。 Grep在Output1.txt中找到了“Buttler”,但没有找到名为“wzahwahwah”的文件