SED - 3개의 "x" 기호가 있는 줄을 표시합니다.

SED - 3개의 "x" 기호가 있는 줄을 표시합니다.

제목에 있는 작업에 대해 질문이 있습니다. SED를 사용하면 3개의 "x" 기호가 있는 행을 표시해야 합니다.

하나의 플래그로 수행하는 방법을 알고 있지만 3개의 플래그에 대해 작동하는 명령을 작성할 수 없습니다.

입력 예:

   blaxblax 
   xxox
   xxx23
   0x1a
   xxxx

산출:

   xxox
   xxx23

답변1

여기서 해야 할 일은 일치하는 정규식을 만드는 것입니다.

  • 줄의 시작 부분부터 시작하여(0개 이상의 "x"가 아닌 문자와 "x"가 뒤따름) 3회
  • 줄이 끝날 때까지 "x"가 아닌 문자가 0개 이상 나옵니다.

sed를 사용하면 작성할 수 있습니다(GNU sed를 가정)

sed -rn '/^([^x]*x){3}[^x]*$/p'

답변2

짧은GNUawk방법:

awk -v FPAT='x' 'NF==3' file
  • FPAT- 필드 값의 패턴 정의
  • NF- 총 필드 수(이 경우 - x문자 발생 횟수)

산출:

xxox
xxx23

답변3

sed -n '/x\{2,3\}/p' test.txt |sed '/x\{4,\}/d'

산출:

xxox
xxx23

답변4

또 다른 GNU sed접근 방식

sed -n 's/x/x/3;T;s/x/x/4;t;p'

POSIXly에서는 다음을 사용할 수 있으며 grep다음을 수행할 필요가 없습니다 sed.

grep -Ex '([^x]*x){3}[^x]*'

grep patternsed '/pattern/!d'POSIX sed는 BRE만 이해하지만 언제든지 다음과 같이 작성할 수 있습니다.

sed '/^\([^x]*x\)\{3\}[^x]*$/!d'

그리고 awk:

awk -F x 'NF == 4'

관련 정보