外壳脚本 - 使用 grep 在文件中找不到字符串



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

文件1.txt

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

文件2.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

新文件包含如下条目:

输出1.txt

Butterscotch
Sox
Table
tram
number
Buttler
wzahwahwah

输出2.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

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

删除.txt

Buttler;Nsadlkt+4S7Yhz
wzahwahwah;PYaY3opP9ieH

但不幸的是,我得到了一个错误:

grep: wzahwahwah: No such file or directory

文件删除.txt而不是所需的数据包含:

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

所以这远远不是我需要的。我注意到,当我从File1.txt中删除时

wzahwahwah;PYaY3opP9ieH

我没有得到错误,我想要的文件看起来像:

Buttler;Nsadlkt+4S7Yhz

有什么想法为什么不起作用吗?

不要使用cat和后续grep,而是使用此grep:

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

当您执行此时

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

变量展开后,由于它未被引用,grep命令将变为

grep Buttler wzahwahwah Output1.txt > Delete.txt

Grep只使用第一个参数作为模式,后面的所有参数都是文件名。Grep在Output1.txt中找到了"Buttler",但没有找到名为"wzahwahwah"的文件

最新更新