공백 사이의 완전한 단어를 찾는 방법

공백 사이의 완전한 단어를 찾는 방법

예를 들어 다음과 같은 문자열이 있습니다 1341 5415 fdad.

명령은 grep -E "(^|\s)[1-9]{1,5}($|\s)" -o제공 하지만 합계를 1341얻고 싶습니다 .13415415

어떻게 해야 하나요?

답변1

echo '1341 5415 fdad' | grep -E -o '\b[1-9]{1,5}\b'

산출:

1341 화
5415

-E: PATTERNS를 확장 정규식으로 해석합니다.

-o:일치하는 줄의 일치하는(비어 있지 않은) 부분만 인쇄하고, 각 부분은 별도의 출력 줄에 표시합니다.

\b:너비가 0인 단어 경계

답변2

당신이 얻는 실제 일치는 1341␣후행 공백이 있는 입니다. grep은 겹치는 일치 항목을 찾지 않으므로 첫 번째 일치 항목이 해당 공간을 차지하면 패턴이 나머지 줄에서 다시 일치하지 않습니다. 그러나 입력이 이면 123 456 789두 문자열 123␣및가 ␣789일치합니다.

사용하기가 더 쉬울 수 있습니다 grep -w.

-w, --word-regexp
전체 단어를 구성하는 일치 항목이 포함된 줄만 선택합니다. 테스트에서는 일치하는 하위 문자열이 줄의 시작 부분에 있거나 단어를 만들지 않는 문자가 앞에 있어야 한다는 것입니다.

$ echo '1341 5415 fdad' |  grep -wE "[1-9]{1,5}" -o
1341
5415

또는 다음과 같이 grep하여 모든 공백을 두 배로 늘릴 수 있습니다.

$ echo '1341 5415 fdad' | sed -e 's/ /  /g' | grep -E "(^|\s)[1-9]{1,5}($|\s)" -o
1341 
 5415 

(또는 sed -e 's/\s/ /g'sed에서 작동하는 경우)

후행 공백 1341과 선행 공백이 있는 줄은 5415일치 항목의 일부입니다.

답변3

한 가지 방법은 모든 공백을 줄 바꿈으로 변경한 다음 이를 사용하여 grep -x표현식과 정확히 일치하는 줄을 선택하는 것입니다.

$ echo '1341 5415 fdad' | tr -s '[:space:]' '[\n*]' | grep -xE -e '[1-9]{1,5}'
1341
5415

관련 정보