~에서

~에서

~에서

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).

관련 정보