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”。
如果你有 GNU sed,那很简单:
sed -zi '/NoDisplay=true/!s/$/\nNoDisplay=true/' file
Run Code Online (Sandbox Code Playgroud)
Option-z在模式空间中一次处理整行(不推荐用于大文件)。如果未!找到( )设置,请在末尾附加一个嵌入的换行符。注意:-i,-z和\n在替换字符串中不是标准的,所以这是不可移植的。
这个有点短。
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文件一起使用。所以不能不知道如何使用它。