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