제목에 있는 작업에 대해 질문이 있습니다. 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 pattern
sed '/pattern/!d'
POSIX sed는 BRE만 이해하지만 언제든지 다음과 같이 작성할 수 있습니다.
sed '/^\([^x]*x\)\{3\}[^x]*$/!d'
그리고 awk
:
awk -F x 'NF == 4'