Sed 명령을 여러 번 대체하는 데 도움이 필요합니다.

Sed 명령을 여러 번 대체하는 데 도움이 필요합니다.

sed 명령이 포함된 파일이 필요합니다. 이와 같은 파일이 있습니다.

amb/eng/hello.amb

다음과 같은 출력이 필요합니다

amx/eng/hello.amx
amx-grk/eng/hello.amx

누구든지 나를 도와줄 수 있나요?

답변1

당신이 사용할 수있는 sed -e 's/amb/amx/gp' -e 's/amx/&-grk/' yourfile.

전임자.

$ echo 'amb/eng/hello.amb' | sed -e 's/amb/amx/gp' -e 's/amx/&-grk/'
amx/eng/hello.amx
amx-grk/eng/hello.amx

답변2

이는 다음과 유사합니다.스틸 드라이버의 답변, 그러나 일치가 약간 더 엄격합니다.

$ sed '\,^amb/\(.*\)\.amb$, { s,,amx/\1.amx,p; s/amx/&-grk/; }' file
amx/eng/hello.amx
amx-grk/eng/hello.amx

amb/위 명령에서는 로 시작하고 끝나는 줄을 찾고 있다고 가정합니다 .amb. 이러한 행이 발견되면 실행된 초기 바꾸기 명령은 두 하위 문자열을 각각 amx/및 로 변경한 .amx다음 수정된 행을 출력합니다. 두 번째 대체는 amx초기 문자열(줄의 시작 부분에 나타나는 것으로 알고 있음)을 로 변경합니다 amx-grk. 두 번째 수정 결과는 루프 끝의 기본 출력으로 출력됩니다.

스크립트 시작 부분에 regex를 실행하는 구분 기호로 쉼표를 사용 sed하고 s명령에 슬래시를 포함하고 싶기 때문에 중괄호 안에 있는 표현식 그룹 내의 명령을 사용하고 있습니다.


이 정확한 명령을 작성하는 또 다른 방법은 b("branch")를 다음과 같이 사용하는 것입니다.아니요초기 정규식과 일치하지 않는 줄을 수정합니다. 이를 통해 명령을 세 가지 별도의 표현식으로 작성할 수 있습니다.

$ sed -e '\,^amb/\(.*\)\.amb$, !b' -e 's,,amx/\1.amx,p' -e 's/amx/&-grk/' file
amx/eng/hello.amx
amx-grk/eng/hello.amx

답변3

다음을 시도해 볼 수 있습니다.

sed 's/amb/amx/g' |  awk -F'/' '{print $1"/"$2"/"$3 " " $1"-grk/"$2"/"$3}'

예를 들어

$ echo  'amb/eng/hello.amb' | sed 's/amb/amx/g' |  awk -F'/' '{print $1"/"$2"/"$3 " " $1"-grk/"$2"/"$3}'
amx/eng/hello.amx amx-grk/eng/hello.amx

관련 정보