나는 이런 문자열을 가지고있다
AAA: BBB: CCC: DDD: EEE
교체해야 해요
AAA: BBB: CCC:
그리고
FF:
그래서 그것은 다음과 같습니다
FFF: DDD: EE
감사해요.
답변1
GNU sed
및 확장 정규식( -r
)을 사용하면 다음이 작동합니다.
sed -r "s/^([^:]*:){3}/FFF:/"
sed <...> filename.txt
또는echo "$original_string" | sed <...>
이는 줄의 시작 부분( )에서 시작하고 "콜론을 제외한 모든 항목( )"과 패턴이 있는 콜론으로 구성된 패턴을 ^
세 번 연속 포함하는 하위 문자열을 대체합니다 .[^:]
FFF:
답변2
다음을 사용할 수 있습니다.
$ sed -e 's/:/\n/3;s/.*\n/FFF:/' file
여기서는 n번째 변경 사항 n<=512를 구현하기 위해 sed의 함수를 사용합니다. 게다가, 개행은 G, H, N을 통해 미리 도입되거나 우리의 예에서처럼 리터럴 개행이 추가되지 않는 한 패턴 공간에서 보이지 않는다는 것이 보장됩니다.
이것은 누세파(Gnu Seism)입니다. Posix sed에서는 이스케이프된 리터럴 개행 문자를 사용합니다.