您只是想删除字符串“$foo”?使用 sed:
sed "/$foo/d" /some/file > /some/other/file
该sed
命令是一个编辑器。采用/$foo/
正则表达式(无论 的值如何$foo
),在文件中找到它。d
告诉它删除该行。
sed
通常不进行就地编辑。您通常必须先写入另一个文件,然后再进行移动。但是,有些sed
命令可能有这样的参数。你可以检查你的管理。
第二次尝试
我认为它必须采取一些行动或执行一些处理或某事,其影响之一是 $foos 之一消失了。(但我可能是错的。) – ruakh 昨天
这就是我晚上回答这些问题的结果。
如果它可以找到您的正则表达式,则可以利用grep
返回true (即退出值 = 0)的事实,否则返回false(即退出值不等于 0):
while grep -o -q "$foo" "/some/file"
do
some_command_that_deletes_foo_in_file
done
-q
告诉 grep 不要输出任何东西。相反,如果找到字符串,grep
则退出值为true ,否则为false。
阅读您的联机帮助页grep
。有些grep
命令没有-q
参数。在这种情况下,您需要将 STDOUT 和 STDERR 都重定向到/dev/null
.
另一种技巧可能是计算行数,然后将其用作计数器:
count=$(grep -o "$foo" "/some/file" | wc -w) # $(...) is the preferred syntax over `...`
for loop in {1..$count}
do
some_command_that_deletes_foo_in_file
done
优点是您只需对文件进行一次 grep 操作(这可能是一个很长的操作)。$foo
但是,如果不止一行,您的计数可能不正确。
几点注意事项:
$(...)
优先于反引号
- 设置变量时,不要在该变量前面使用美元符号。注意我有
count=
和没有$count=
。
- 观察空间。
count= $(...)
是错误的,因为等号后面有一个空格。