구분 기호가 세 번째로 나타날 때까지 문자열 부분을 바꾸는 방법은 무엇입니까?

구분 기호가 세 번째로 나타날 때까지 문자열 부분을 바꾸는 방법은 무엇입니까?

나는 이런 문자열을 가지고있다

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에서는 이스케이프된 리터럴 개행 문자를 사용합니다.

관련 정보