sed 정규식을 사용하여 서로 관련된 단어와 그 사이의 한 문자를 바꾸는 방법

sed 정규식을 사용하여 서로 관련된 단어와 그 사이의 한 문자를 바꾸는 방법

sed 정규식을 사용하여 문자와 두 단어를 그룹으로 변경하지 않고 서로 관련된 단어와 그 사이의 문자를 바꾸는 방법

ahmed#mohamed 
ahmed$mohamed
ahmed7mohamed

ahmed그냥 교체하고 mohamed그냥 교체하고 싶지는 않습니다.

나는 사용했다

sed -i 's/ahmed.mohamed/mohamed.ahmed/g'

하지만 이렇게 모든 것을 유지함으로써 그들 사이의 성격을 보존하고 싶었습니다.

mohamed.ahmed
mohamed.ahmed
mohamed.ahmed

답변1

당신은 매우 가깝습니다. 캡처 대괄호를 사용해야 합니다.

sed -E -i 's/ahmed(.)mohamed/mohamed\1ahmed/g'

\1대체할 텍스트첫 번째브래킷 세트입니다.

답변2

특정 문자로 구분된 두 문자열을 교환하려고 합니다 ahmed.mohamed

당신이 표현한 질문은,

s/ahmed.mohamed/mohamed.ahmed/

단어 사이의 문자는 항상 점으로 대체된다는 점입니다. 해결책은 캐릭터를 캡처하여 그 자체로 바꾸는 것입니다.

이를 수행하는 한 가지 방법은 다음과 같습니다. sed또한 동일한 캡처 메커니즘을 사용하여 교체를 위해 두 개의 문자열을 다시 입력하지 않도록 합니다.

sed 's/\(ahmed\)\(.\)\(mohamed\)/\3\2\1/'

또는,

sed -E 's/(ahmed)(.)(mohamed)/\3\2\1/'

주어진 데이터에 대해 테스트:

$ sed -E 's/(ahmed)(.)(mohamed)/\3\2\1/' <file
mohamed#ahmed
mohamed$ahmed
mohamed7ahmed

관련 정보