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
我有四个文件,分别名为 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