숫자가 포함된 grep 단어

숫자가 포함된 grep 단어

두 개의 문자열이 있습니다

"Some Special xn39432n4 (foo bar)"
"Another thing goes 21 deer 14.5"

을 사용하면 sed이 출력을 원합니다.

xn39432n4
21 deer 14.5

숫자(첫 번째 발생부터 마지막 ​​발생까지)와 그 사이에 숫자가 아닌 단어를 포함하는 공백으로 구분된 모든 단어를 나타냅니다.

답변1

어쩌면 다음과 같은 것일 수도 있습니다.

sed -n '
  s/\([^[:space:]]*[[:digit:]][^[:space:]]*\(.*[[:digit:]][^[:space:]]*\)\{0,1\}\).*/\
\1/
  s/.*\n//p' < your-file

space이는 하나 이상의 digit선택 사항( )을 포함하는 흰색이 아닌 시퀀스와 일치하고 \{0,1\}그 뒤에 문자 시퀀스가 ​​오고 그 뒤에 숫자가 오고 space그 뒤에는 모두 흰색이 아닌 시퀀스가 ​​옵니다.

이는 에서 캡처되며 \1, ( ) 뒤의 문자를 버리고 .*그 앞에 개행 문자를 삽입합니다. 이 문자는 다음 명령에서 이전 내용과 함께 삭제됩니다 s.

답변2

GNU를 사용하여 이 작업을 수행할 수 있습니다 grep.

$ grep -oP '\w+[.\d]+\w+|[.\d]+\s+\w+\s+[.\d]+' file 
xn39432n4
21 deer 14.5

두 가지 정규식은 다음과 같습니다.

  • \w+[.\d]+\w+: 하나 이상의 단어 문자( \w+az, AZ 및 와 일치 _)와 일치하고 하나 이상의 숫자 또는 .문자( [.\d]+)와 일치한 다음 하나 이상의 단어 문자( \w+)와 다시 일치합니다.
  • [.\d]+\s+\w+\s+[.\d]+': 하나 이상의 숫자 또는 .문자( [.\d]+)와 일치하고, 하나 이상의 공백 문자( \s+)와 일치하고, 하나 이상의 단어 문자( \w+)와 일치하고, 하나 이상의 공백 문자와 일치하고, 마지막으로 하나 이상의 숫자 또는 와 일치합니다 ..

결합하면 설명하는 두 가지 상황과 일치해야 합니다. 단 두 가지 간단한 예만 제공했기 때문에 알기는 어렵습니다. -oGNU 옵션을 사용하면 grep각 줄에서 일치하는 부분만 인쇄합니다.

관련 정보