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

제공한 정보를 바탕으로 두 곳을 교체하려고 하므로 다음을 사용합니다.

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

관련 정보