경우 StringB
와 StringA
같은 입력 행에 표시 할 수 없습니다, 당신은 대체 한 방법을 수행하고, 거기에 첫번째 전혀 발생은 없었다 문자열을 검색 할 경우에만 다른 방법을 시도 나오지도 알 수 있습니다.
<file.txt sed -e 's/StringA/StringB/g' -e t -e 's/StringB/StringA/g'
일반적인 경우에는 sed에 쉬운 방법이 없다고 생각합니다. 그런데, 노트는 사양 경우 모호한 것을 StringA
및 StringB
겹칠 수 있습니다. 다음은 Perl 솔루션입니다. 문자열의 가장 왼쪽에있는 부분을 대체하고 반복합니다.
<file.txt perl -pe 'BEGIN {%r = ("StringA" => "StringB", "StringB" => "StringA")}
s/(StringA|StringB)/$r{$1}/ge'
POSIX 도구를 고수하려면 awk가 좋습니다. Awk는 일반적인 매개 변수화 된 대체를위한 기본 요소를 가지고 있지 않으므로 직접 롤백해야합니다.
<file.txt awk '{
while (match($0, /StringA|StringB/)) {
printf "%s", substr($0, 1, RSTART-1);
$0 = substr($0, RSTART);
printf "%s", /^StringA/ ? "StringB" : "StringA";
$0 = substr($0, 1+RLENGTH)
}
print
}'
sed: can't read s/StringB/StringA/g: No such file or directory
.-e t PATTERN
잘 이해되지 않은 것 같습니다 .