마지막 일치 항목 뒤에 문자열을 삽입하고 싶습니다. 예를 들면 다음과 같습니다.
바나나의 마지막 인스턴스 뒤에 삽입할 문자열: 주황색
입력하다
Apple
Banana
Apple
Banana
산출
Apple
Banana
Apple
Banana
Orange
XML 태그를 사용하여 이 작업을 수행하려고 합니다. 여는 태그를 추가하는 방법을 알아냈습니다.
답변1
짧고 간단하게 할 일정확히질문받은 내용:
printf '%s\n' '0?Banana?a' Orange . x | ex file.txt
변경 사항을 즉시 저장하는 대신 파일에 무엇이 저장되는지 확인하려면 다음을 사용하세요.
printf '%s\n' '0?Banana?a' Orange . %p | ex file.txt
이것이 하는 일:
파일의 처음부터 0
검색 ( )뒤로( ?regex?
)는 "Banana"의 다음 인스턴스(둘러싸기)를 나타내고 a
"Orange" 줄을 추가합니다( ). 기간이 끝나면 추가, 저장 x
및 종료하십시오.
답변2
tac a | sed '0,/Banana/{s/Banana/Orange\nBanana/}' | tac
할 것이다!
편집: 이 질문에 대한 답변 수정 -https://stackoverflow.com/questions/18291341/sed-only-the-last-match-pattern
답변3
sed -e:n -e'/\n.*Banana/!{$!{N' \
-e'/Banana/bn' -eb -e\}\
-e's/\n/&Orange&/;t' \
-e'/Banana/a\' -eOrange\
-e\} -e'P;D' <<\IN
Apple
Banana
Apple
Banana
IN
Apple
Banana
Apple
Banana
Orange
이는 상당히 안정적으로 작동합니다. 패턴 공간에 버퍼링됩니다.~ 사이발생 횟수Banana
입력 시 - 새 버퍼 그룹이 일치하면 마지막 버퍼 그룹의 전체 내용을 stdout으로 인쇄합니다. 그리고 마지막으로 등장한Banana
어떤 상황이든 올바르게 처리해야 합니다.어디입력 시 발생합니다. 또한 출력을 쓰기 전에 전체 입력 파일을 읽을 필요가 없습니다.