내가 가지고 있고 그것이 에 대해 동일한 패턴일 수 있다고 aaaaabaaaaa
가정합니다 .a
b
패턴 일치를 수행한 다음 aaaaaab
'이후'를 모두 '로 바꾸되 '이전'은 바꾸지 않는 방법은 무엇입니까?aaaaa
b
b
a
b
답변1
sed에서는 너무 복잡하지만 Perl에서는 훨씬 쉽습니다.
perl -pe '/b/g and substr($_, pos) =~ s/a/A/g'
첫 번째 일치 항목은 위치가 설정된 문자열의 /b/g
첫 번째 항목과 일치합니다 . 그런 다음 해당 위치에서 시작하는 하위 문자열이 대체됩니다.b
pos
답변2
sed를 사용하세요. 단, 데이터에 절대 포함되지 않는 문자 시퀀스를 선택해야 합니다.
( echo 'zzzaaaaadddd' ;
echo 'ssssaaaaajaaaaakaaaaa';
echo 'ssssaaaaaaaaaakaaaaa'; ) | \
sed '/aaaaa.*aaaaa/ { s/aaaaa/_=|=_/; s/aaaaa/GGGGG/g; s/_=|=_/aaaaa/ }'
zzzaaaaadddd
ssssaaaaajGGGGGkGGGGG
ssssaaaaaGGGGGkGGGGG
설명하다:
- 최소 2개의 aaaaa 라인이 영향을 받습니다.
- 바꾸다아아아아
_=|=_
당신은 결코 가질 수 없는 밧줄을 가지고 - 다른 사람을 대신하다아아아아너가 원하는 것을해라구구구구
_=|=_
다시 교체아아아아
답변3
또한 다음 재귀 sed
솔루션을 시도해 보세요.
sed ':L; s/\(a*\)b\(a*\)a/\1b\2b/; tL; ' file
모든 대상 이벤트가 완료될 때까지 각 대상 a
이벤트를 반복적으로 교체합니다.b