sed로 "abb a 교체"를 시뮬레이션하는 방법은 무엇입니까?

sed로 "abb a 교체"를 시뮬레이션하는 방법은 무엇입니까?

sed 스크립트를 사용하여 두 문자를 바꾸는 대체 명령을 시뮬레이션하려고 하는데 확실한 선택은 다음과 같습니다.

sed -e 's/a/b/g' -e 's/b/a/g' 

아무것도 작동하지 않습니다. 이 작업을 올바르게 수행하는 방법을 알려 주시겠습니까?

답변1

번역 명령을 사용하겠습니다.예를 들어.

tr ab ba < input_file

답변2

개인만 바꾸고 싶다면수치, 더 이상 문자열이 아닌 경우 사용

sed -e 'y/ab/ba/'

tr또는 X Tian의 답변에 해당하는 명령이 있습니다. 임의의 문자열의 경우 더 열심히 작업해야 합니다.

예를 들어 입력에 확실히 나타나지 않는 문자가 있는 경우 #(제어 문자도 나타남) 다음과 같은 것을 사용할 수 있습니다.

sed -e 's/a/#/g;s/b/a/g;s/#/b/g;'

또는 접두사를 추가하여 몇 가지 트릭을 수행할 수 있습니다.

sed -e '
s/a/xa/g;
s/b/xb/g;
s/xa/yb/g;
s/xb/ya/g;
s/ya/a/g;
s/yb/b/g;
'

즉, 모든 접두사 a및 를 사용하고 (의미: 아직 수정되지 않음), 로 바꾸고 그 반대로 바꾸고( 즉, 수정됨) 모든 접두사를 삭제합니다.bxxayby

답변3

여유 캐릭터가 있다면 Uwe의 조언을 따르세요.

실제로 단일 문자만 교체해야 하고 반드시 필요하지 않은 경우 sedXTian tr의 제안을 따르십시오.

필요하지 않고 sed대체 문자 없이 더 긴 시퀀스를 교체하려는 경우 다음과 같은 방법을 사용할 수 있습니다.

perl -le '%ex=(a=>"b",b=>"a"); $keys=join("|",keys(%ex)); $text="abba"; $text=~s/$keys/$ex{$&}/eg; print $text'

또는

ruby -e 'ex={"a"=>"b","b"=>"a"}; puts "abba".gsub(/(#{ex.keys.join("|")})/,ex)'

관련 정보