2012-04-18 75 views
15

我有一个恼人的闭源工具,它将特定的信息写入其配置文件。如果您尝试在不同的文件上使用该配置,则会加载旧文件。 Grrr ...如何从一组文件中删除所有匹配模式的行?

幸运的是,配置文件是文本,所以我可以版本控制它们,事实证明,如果只是从文件中删除违规行,则不会造成危害。

但是该工具不断将线条放回原位。因此,每次我要检查配置文件的新版本时,我必须删除包含符号openDirFile的所有行。

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

要获得额外荣誉,如何在不破坏同一目录中的符号链接的情况下完成此任务(favourite.rc-> signals.rc)?

回答

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

此做删除所有conf文件

你也可以用“查找”命令结合行,如果你的conf文件位于不同的路径。

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

+0

真棒,我怎么不知道这件事? – 2012-04-18 09:34:41

0

这是我想出了庆典咒:

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

肯特的答案显然是更胜一筹。

相关问题