我有一个包含以下内容的文件。我想替换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
根据您提供的信息,您想在两个地方进行替换,因此可以使用:
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