Bash:从文件中删除与变量匹配的行

Bash: Delete a line from a file matching a variable

我有四个文件,分别名为 source、correct、wrong 和 not_found。我正在尝试在 bash 中编写一个脚本,其中我从名为 source 的文件中读取每一行,将该行存储为变量 x,并将其与条件匹配。

如果通过,那么我需要将该行写入名为 correct 的文件,但问题是在写入 correct 之前我需要检查变量 x 当前是否存在于名为 wrong 的文件中,如果是,则将其删除,然后然后将该行添加到名为 correct.

的文件中

我试过下面的方法,但它没有修改文件,也没有给我任何输出:

sed -i '/$x/d' ./wrong

如您所知,'...' 中的变量不会展开。

如果将单引号替换为双引号, 这将从 ./wrong:

中删除匹配行
sed -i "/$x/d" ./wrong

但是如果有匹配项,您还想将该行添加到 ./correct。 为此,您可以在 sed:

之前 运行 grep
grep "$x" ./wrong >> ./correct

这将达到预期的效果, 但是 sed 会覆盖 ./wrong,即使它不需要。 你可以这样防止:

if grep "$x" ./wrong >> ./correct; then
    sed -i "/$x/d" ./wrong
fi