Text-Processing

如果不存在,將行附加到文件

  • July 26, 2018

我想在 Makefile 中添加一系列命令,*當它們不存在時附加配置行。*我過去以這樣的方式做到了這一點:

grep -vq "keyword" /a/b/c.conf && echo "abc keyword" >> /a/b/c.conf

但是,我顯然忽略了一些東西。命令 as-is 會導致重新執行時復製配置行。

手動測試顯示該模式按預期工作:

grep -vq "keyword" /a/b/c.conf && echo "the line is absent"

…僅當該行實際不存在時才列印該行不存在。 並且,當該行存在時,該命令不會正確執行*。*echo

我錯過了什麼?


**注意:**為了便於閱讀,上面的例子被壓縮了。實際上,會有很多類似的命令。這是我嘗試過的特定命令:

grep -vq “md_module” /etc/httpd/conf.modules.d/00-ssl.conf && echo “LoadModule md_module modules/mod_md.so” >> /etc/httpd/conf.modules.d/00-ssl.會議

問題是grep -v它將匹配與表達式不匹配的,而不是與它不匹配的文件……

因此,如果您的文件有任何不匹配的行,grep -v將匹配這些行,因此 grep 將返回成功。

更好的方法是對關鍵字使用匹配,然後在需要時使用||(而不是&&)附加該行:

grep -q "keyword" /a/b/c.conf || echo "abc keyword" >> /a/b/c.conf

echo "the line is absent"當它確實不存在時,您可能會在測試中說它不存在……如果這是唯一的一條線,也許什麼也不做。如果你進一步測試,我想你會發現只要它有任何不匹配關鍵字的行,你就會得到匹配。

我希望這能澄清它!

引用自:https://unix.stackexchange.com/questions/458501