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