![숫자가 포함된 grep 단어](https://linux55.com/image/216743/%EC%88%AB%EC%9E%90%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20grep%20%EB%8B%A8%EC%96%B4.png)
두 개의 문자열이 있습니다
"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+
)와 일치하고, 하나 이상의 공백 문자와 일치하고, 마지막으로 하나 이상의 숫자 또는 와 일치합니다.
.
결합하면 설명하는 두 가지 상황과 일치해야 합니다. 단 두 가지 간단한 예만 제공했기 때문에 알기는 어렵습니다. -o
GNU 옵션을 사용하면 grep
각 줄에서 일치하는 부분만 인쇄합니다.