'bar'로 시작하고 'i' 또는 'n'으로 끝나는 6글자 단어의 수를 세고 싶습니다.
예를 들어, 다음 파일이 제공됩니다.
barxxi
barxxc
barxxn
barqwq
barovo
다음 행이 일치하므로 출력은 2(정수)여야 합니다.
barxxi
barxxn
내 코드는 다음과 같지만 잘못된 것 같습니다.
grep -c 'bar??[ni]' /path/file.txt
답변1
grep -o
필요한 경우 일치하는 텍스트만 한 줄에 여러 번 출력하려면 이 옵션을 사용합니다 .
grep -o '\<bar[^ ][^ ][ni]\>' /path/file.txt | wc -w
단어의 시작과 끝을 \<
일치시킵니다 . 공백이 아닌 문자와 \>
일치합니다 .[^ ]
답변2
물음표를 ?
마침표로 바꾸면 .
입력에 한 줄에 단어가 하나만 있는 한 grep이 작동합니다.
grep -c 'bar..[ni]' /path/file.txt
답변3
awk '{ for (i=1;i<=NF;i++) if ($i ~ /^bar.*[in]/ || $i ~ /[[:space:]]bar.*[in]/) { count++ }} END { print count }' filename
위의 awk 솔루션도 작동합니다. 각 줄의 여러 항목을 고려하여 패턴이 ~가 있는 정규 표현식과 일치하면 awk는 파일의 각 줄에서 공백으로 구분된 첫 번째 항목부터 마지막 항목(NF)까지 찾아 그에 따라 개수를 증가시킵니다. 줄의 시작(^)과 막대, 공백 및 막대를 고려하는 두 개의 if 문을 만듭니다. 마지막으로 카운트가 화면에 인쇄됩니다.