仅当字符串不存在时才将文本附加到文件的更优雅的方法?

Ken*_*ien 4 grep text-processing

我想将 NoDisplay=true 附加到 .desktop 文件,但前提是该条目不存在。我按以下方式执行此操作:

grep -q 'NoDisplay=true' '/usr/share/applications/yelp.desktop' || bash -c 'echo "NoDisplay=true" >> /usr/share/applications/yelp.desktop'
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更短的 oneliner 用于相同的操作?

我在 bash 脚本中使用此命令,并且不得不使用命令“bash -c”。

Phi*_*pos 6

如果你有 GNU sed,那很简单:

sed -zi '/NoDisplay=true/!s/$/\nNoDisplay=true/' file
Run Code Online (Sandbox Code Playgroud)

Option-z在模式空间中一次处理整行(不推荐用于大文件)。如果未!找到( )设置,请在末尾附加一个嵌入的换行符。注意:-i,-z\n在替换字符串中不是标准的,所以这是不可移植的。

  • 我的错误:您不能将选项 `-i` 和 `-z` 组合为 `-iz`,因为这会将 `z` 视为用于就地编辑的备份文件的后缀。`-i -z` 或 `-zi` 应该可以工作。感谢您的输入,@ctrl-alt-delor! (4认同)

ctr*_*lor 5

这个有点短。

grep -q 'NoDisplay=true' '/usr/share/applications/yelp.desktop' || echo "NoDisplay=true" >> /usr/share/applications/yelp.desktop
Run Code Online (Sandbox Code Playgroud)

还有一个专门为这个 Augeas ( augtool)设计的工具。我没有将它与.desktop文件一起使用。所以不能不知道如何使用它。