我想在組態檔中更改應用程式名稱。Name=有多次出現,但我只想更改第一次。作為參考,組態檔具有以下結構:
[Desktop Entry]
Version=1.0
Name=name
Name[ar]=...
[...]
[Desktop Action new-window]
Name=Open a New Window
[...]
到目前為止,我嘗試的是 bash 命令 sed:
sudo sed "0,/Name/s/=.*\$/=Replace/" app_desktop_configs/std_firefox.desktop
這主要做了我想要的,但也替換了版本號:
[Desktop Entry]
Version=Replace
Name=Replace
Name[ar]=...
[...]
也歡迎使用 sed 的替代解決方案:)
uj5u.com熱心網友回復:
Name=所以完全不匹配=.*
sed '0,/^Name=/s/^Name=.*/Name=Replace/'
uj5u.com熱心網友回復:
Perl 解決方案:
perl -i.bak -pe 'unless ( $cnt ) { s{Name=name}{Name=replace} and $cnt ; } ' infile
Perl 單行器使用這些命令列標志:
-e:告訴 Perl 查找行內代碼,而不是在檔案中。
-p:一次回圈輸入一行,$_默認情況下將其分配給。print $_在每次回圈迭代后添加。
-i.bak:就地編輯輸入檔案(覆寫輸入檔案)。在覆寫之前,通過在其名稱后附加擴展名來保存原始檔案的備份副本.bak。
還請參見
perldoc perlrun::如何執行 Perl 解釋器:命令列開關
perldoc perlre:Perl 正則運算式(正則運算式)
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed -E '/(name=).*/{s//\1Replace/;:a;n;ba}' file
或者:
sed -E 's/(name=).*/\1Replace/;T;:a;n;ba' file
或者:
sed -E 'x;/./{x;b};x;/(name=).*/h;s//\1Replace/' file
以上所有解決方案都修改了第一次出現的name,然后繼續到檔案的末尾,不再做進一步的修改。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/479318.html
