~에서
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
Red2
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue
도착하다
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
REDRED22
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue
답변1
sed 's/Red2/REDRED22/'
예:
sed 's/Red2/REDRED22/' redred
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
REDRED22
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue
원본 파일은 다음과 같습니다.
cat redred
White
Black
Green1
Red1
Yellow1
Blue
----
White
Black
Green2
Red2
Yellow2
Blue
----
White
Black
Green3
Red3
Yellow3
Blue
답변2
Perl 호환 일반 검색은 다음과 같습니다.
(?<=Green2\n).*(?=(\n.*)+Yellow2)
제가 아는 한, "이전"과 "이후" 모드는 Green2와 Yellow2이며 Green2 이후의 전체 행을 선택해야 합니다. 이 패턴은 Yellow2 앞에 행이 더 있는 경우에도 작동합니다. 그러나 sed의 이스케이프 요구 사항으로 인해 이를 달성하기가 어렵습니다.
Perl에서는 다음과 같이 합니다:
perl -0777 -pe 's/(?<=Green2\n).*(?=(\n.*)+Yellow2)/REDRED22/g' /path/to/file
답변3
나는 이것을 아주 늦게 알았지만, 이 작업을 수행하기 위해 sed를 사용하는 도전에 저항할 수 없었습니다.
redred라는 파일에 텍스트를 배치합니다.
sed -E ':a;N;$!ba;s/(Green2\n)([a-zA-Z]*)([0-9]*)(\nYellow2)/\1\2\2\3\3\4/g' redred
사용이것\n을 sed로 읽는 기술과 대상을 분해하고 재구성하기 위한 위치 마커를 처리합니다.
또한 텍스트와 숫자로 구성된 대상(예: Aubergine123)을 [[:alpha:]] 및 [[:digit:]] 구성 요소로 분할한 다음 OP가 원하는 대로 대상 문자열을 재구성합니다(AubergineAubergine123123).