sed 표현식은 첫 번째로 일치하는 그룹을 추출합니다.

sed 표현식은 첫 번째로 일치하는 그룹을 추출합니다.

다음 텍스트가 있습니다.

somegarbageSTARTfirstgroupENDsomeendgarbage
someohtergarbageSTARTsecondgroupENDsomeotherendgarbage
...

firstgroupsed를 사용하여 추출 하고 싶습니다 .

시도해 보았지만 sed -nr 's/.*START(.*)END.*/\1/p'작동하지 않습니다. 첫 번째 일치 항목뿐만 아니라 모든 일치 항목을 추출합니다.

답변1

sed -nr '/.*START(.*)END.*/{s/.*START(.*)END.*/\1/p;q}'
# or (probably faster)
sed -nr 's/.*START(.*)END.*/\1/p; t quit; b end; : quit; q; : end;'

답변2

GNU와 함께START...END, 한 줄에 최대 하나만 있다고 가정합니다.

grep -oPm1 'START\K.*?(?=END)' file

그리고END, 첫 번째 발생이 첫 번째 행에 있고 첫 번째 발생 이전에 발생이 없으며 START반환할 값에 아무것도 없다고 가정합니다.START

awk -F'START|END' '{print $2;exit}' file

또는

awk -F'START|END' '$0 ~ FS {print $2;exit}' file

그리고:

perl -lne 'do{ print $1; last } if /START(.*?)END/' file

산출

firstgroup

관련 정보