如何从一组文件中删除与模式匹配的所有行?

时间:2012-04-18 09:14:44

标签: bash sed grep pattern-matching

我有一个恼人的闭源工具,它将特定信息写入其配置文件中。如果您尝试在其他文件上使用配置,则会加载旧文件。哎呀...

幸运的是,配置文件是文本,因此我可以对它们进行版本控制,事实证明,如果只是从文件中删除了违规行,则不会造成任何损害。

但该工具不断将线路放回去。所以每次我想检查新版本的配置文件时,我都要删除包含符号openDirFile的所有行。

我即将构建某种bash命令,在每个文件上运行grep -v,将结果存储在临时文件中,然后删除原始文件并重命名临时文件,但我想知道是否有人知道一个好的干净的解决方案,或者已经调制并调试了类似的调用。

如果需要额外的功劳,如何在不破坏同一目录中的符号链接的情况下完成这项工作(favourite.rc-> signals.rc)?

2 个答案:

答案 0 :(得分:18)

sed -i '/openDirFile/d' *.conf

这会删除所有conf文件

如果您的conf文件位于不同的路径中,您还可以将该行与“find”命令组合使用。

请注意-i将执行“就地”删除。

答案 1 :(得分:0)

这是我提出的bash-spell:

for i in *.rc ; do TMP=$(mktemp) ; grep -v openDirFile ${i} >${TMP} ; mv ${TMP} ${i} ; done

肯特的回答显然更胜一筹。

相关问题