Bash 从命令行在文件中的多个位置替换字符串

Bash 从命令行在文件中的多个位置替换字符串

我有一个包含以下内容的文件。我想替换chromechromeBackup但不是所有地方。

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

根据您提供的信息,您想在两个地方进行替换,因此可以使用:

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

相关内容