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
및 를 사용하고 (의미: 아직 수정되지 않음), 로 바꾸고 그 반대로 바꾸고( 즉, 수정됨) 모든 접두사를 삭제합니다.b
x
xa
yb
y
답변3
여유 캐릭터가 있다면 Uwe의 조언을 따르세요.
실제로 단일 문자만 교체해야 하고 반드시 필요하지 않은 경우 sed
XTian 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)'