sed를 사용하여 한 줄에 n번 반복되는 패턴을 반복적으로 인쇄합니다.

sed를 사용하여 한 줄에 n번 반복되는 패턴을 반복적으로 인쇄합니다.

cmd를 사용하여 sed모든 패턴을 한 줄에 인쇄하고 싶습니다. 나는 grep -Peand 를 사용하여 이 작업을 수행하는 방법을 알고 있습니다 awk. 나는 다음과 같이 시작했습니다:

$ sed 's/^.*label="\(.*\)" selected.*$/\1/g' <(echo 'smkj sld/6_ !label="snd 1" selected>lms slks.;label="snd 2" selected>lkwnl  wlkmlabel="snd 3" selected>The following should not be printedlabel="')
snd 3

그러나 위의 내용은 snd 3사이의 문자열 만 인쇄합니다.마지막label="그리고 발생 " selected. 모든 행에 정규 표현식의 모든 항목을 포함하는 방법은 무엇입니까?

답변1

이를 사용하면 GNU sed아래와 같이 원하는 출력을 생성할 수 있습니다.

$ sed -Ee '
     s/label="([^"]+)" selected[>]/\n\1\n/
     s/.*\n(.*\n)/\1/
     /\n/!d
     P;D
' input.txt

산출:

snd 1
snd 2
snd 3

Perl라이너로 할 수 있습니다 .

$ perl -lne 'print for /label="([^"]+)" selected[>]/g' input.txt

답변2

사용행복하다(이전 Perl_6)

~$ raku -ne '$/.join("\n").put if m:g/ label\= \" <(<-["]>+)> \" \h selected \> /;'  <(printf 'smkj sld/6_ !label="snd 1" selected>lms slks.;label="snd 2" selected>lkwnl  wlkmlabel="snd 3" selected>The following should not be printedlabel="')
snd 1
snd 2
snd 3

#OR

~$ raku -ne '$/.join("\n").put if m:g/ label\= \" <(<-[\c[QUOTATION MARK]]>+)> \" \h selected \> /;'  <(printf 'smkj sld/6_ !label="snd 1" selected>lms slks.;label="snd 2" selected>lkwnl  wlkmlabel="snd 3" selected>The following should not be printedlabel="')
snd 1
snd 2
snd 3

Raku는 Perl 제품군의 프로그래밍 언어이며 이 답변은 @RakeshSharma가 게시한 뛰어난 Perl 답변을 칭찬하기 위한 것입니다.

간단히 말해서, 이 Raku 답변은 @RakeshSharma와 동일한 접근 방식을 취합니다. "검소한 대 탐욕스러운" 일치를 사용하여 문제를 해결하려고 시도하지 말고 대신 인용된 대상 문자열에 내부 인용문이 없다는 것을 인식하십시오. 따라서 (@RakeshSharma와 유사) Raku에서는 사용자 정의를 선언합니다.부정적인문자 클래스 <-["]>+, 다음으로 변환됨"" 따옴표 없이 연속된 하나 이상의 문자. (궁금하신 경우, <+[…]>더 간단히 말하면 <[…]>맞춤식을 의미합니다.긍정적인캐릭터 클래스). 두 번째 답변은 정식 \c[QUOTATION MARK]이름을 명시적으로 사용하므로 때로는 까다로운 참조 문제를 피하는 데 도움이 될 수 있습니다.

그러면 정규식의 나머지 부분은 다음과 같습니다.

  • 필수 일치 항목 앞에는label\= \"
  • 필수 일치 항목 뒤에는 \" \h selected \>( \h가로 공백을 나타냄)이 옵니다.
  • 전체 정규식을 일치시킨 후 Raku의<( … )> 캡쳐마크모든 것을 밖으로 던져라.

Raku의 $/변수에는 최종 일치 항목이 포함되어 있으며 m:global/ … /또는 m:g/ … /일치 항목이 지정되었으므로 필요한 세 개의 일치 항목이 반환됩니다.

https://docs.raku.org/언어/regexes
https://raku.org

관련 정보