Bashは、コマンドラインでファイル内のさまざまな場所にある文字列を置き換えます。

Bashは、コマンドラインでファイル内のさまざまな場所にある文字列を置き換えます。

次の内容を含むファイルがあります。私は交換したいのですが、どこでもchromeそうchromeBackupではありません。

Name=chrome
XXXXXXXXXXX
Run=bin -app "chrome/chrome.sh"
XXXXXXXXXXX
Vol.apps/chrome=chrome
XXXXXXXXXXX

希望の出力:

Name=chrome
XXXXXXXXXXX
Run=bin -app "chromeBackup/chromeBackup.sh"
XXXXXXXXXXX
Vol.apps/chromeBackup=chromeBackup
XXXXXXXXXXX

答え1

提供した情報に基づいて2つの場所を交換しようとしているので、次のようにします。

sed -e /^Run/s/chrome/chromeBackup/g -e /^Vol/s/chrome/chromeBackup/g file_name

編集する

@Kusalanandaが彼のコメントで述べたように、より短いバージョンは次のとおりです。

sed -E '/^(Run|Vol)/s/chrome/&Backup/g' file_name

答え2

おそらくより一般的には、出発線のインスタンスを除くすべてのインスタンスを変更することです。Name=

from="chrome"; to="${from}Backup"; sed "/^Name/! s/$from/$to/g" fileToChange

または最初の行をスキップしてください。

from="chrome"; to="${from}Backup"; sed "2,$ s/$from/$to/g" fileToChange

Runまたは or で始まる行のみVol

from="chrome"; to="${from}Backup"; sed -E "/^Run|^Vol/ s/$from/$to/g" fileToChange

関連情報