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

时间:2017-11-18 09:23:19

标签: bash quoting

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

如果它通过,那么我需要将该行写入名为correct的文件,但是在写入正确之前catch需要检查变量x当前是否存在于名为wrong的文件中,如果是,则删除它然后添加要归档的文件行。

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

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

1 个答案:

答案 0 :(得分:0)

正如您已经了解的那样,'...'中的变量不会被扩展。

如果用双引号替换单引号, 这将从./wrong删除匹配的行:

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

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

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

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

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