파일에서 추가 교체를 위해 파일의 하위 문자열을 가져오는 Linux 명령

파일에서 추가 교체를 위해 파일의 하위 문자열을 가져오는 Linux 명령

a) "Sune"으로 시작하는 줄 뒤의 첫 번째 "Kalle" 줄 앞에 "//VERSION 221204 NEW LINE" 줄을 삽입하려고 합니다.

b) 또한 "모든 하위 문자열"(단어)을 가져와 이를 사용하여 위 a)에 설명된 줄의 VERSION을 대체해야 합니다. 따라서 위에 추가된 라인은 "//221204 NEW LINE"이어야 합니다.

편집할 파일의 예는 다음과 같습니다.

방문객

Annika "모든 하위 문자열" Anna(참고: Annika는 파일에서 고유합니다.)

시그

수네 벨라

방문객

주문하다: sed '/Sune.*/,/Kalle/!b;/Kalle/i // VERSION 221204 NEW LINE' <file>

이것이 제가 얻은 라인입니다. 지금까지 매우 좋았습니다.

방문객

아니카 리사 안나

시그

수네 벨라

// 버전 221204 새 줄

방문객

그러나 내가 원하는 것은 Lisa()를 가져와서 VERSION을 그것으로 바꾸는 것입니다. 따라서 새 줄은 다음과 같아야 합니다. // Lisa 221204 NEW LINE

이것은 Lisa를 얻는 데 사용될 수 있습니다.(<any substring>). | awk '/Annika /{print $(NF-1)}'

그런데 어떻게 합쳐지나요? "리사"를 먼저 획득하고 나중에 교체할 ​​수 있도록 어떻게든 저장할 수 있나요?

라이너가 있으면 괜찮을 것입니다. sed, awk와 같은 bash 및 Linux 명령을 원합니다...

답변1

사용sed

sed -E '{

/Kalle/!{n;b}
:A /Annika/!{n;bA}
:B /Sune/!{N;bB}
/Annika[[:space:]]+([[:alpha:]]+).*/{
  s//&\n\n\/\/ \1 221204 NEW LINE/
 }

}' file

하나의 선:

sed -E '/Kalle/!{n;b}; :A /Annika/!{n;bA}; :B /Sune/!{N;bB}; /Annika[[:space:]]+([[:alpha:]]+).*/{s//&\n\n\/\/ \1 221204 NEW LINE/}' file

관련 정보