我有四个名为source,correct,wrong和not_found的文件。我正在尝试在bash中编写一个脚本,其中我从名为source的文件中读取每一行,将该行存储为变量x,并将其与条件匹配。
如果它通过,那么我需要将该行写入名为correct的文件,但是在写入正确之前catch需要检查变量x当前是否存在于名为wrong的文件中,如果是,则删除它然后添加要归档的文件行。
我在下面尝试过,但它没有修改文件,也没有给我任何输出:
sed -i '/$x/d' ./wrong
答案 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