Bash를 사용하여 텍스트의 다른 단어에서 숫자를 추출하는 방법(숫자만)

Bash를 사용하여 텍스트의 다른 단어에서 숫자를 추출하는 방법(숫자만)

사용불다, 적어도 하나의 숫자(숫자는 하나 이상의 숫자로만 구성됨)를 포함하는 텍스트의 줄 수를 표시하고 싶습니다.
또한 감지된 숫자를 선으로 표시하고 싶습니다. 텍스트 파일 example.txt의 예가 필수 출력과 함께 제공됩니다.

$ cat example.txt
Electronic mail is a method of exchanging digital messages between computer 
users; such messaging first entered substantial
use in the 1960s and by the 1970s had taken the form now recognised as email. 
These are spams email ids: 

08av , 29809, pankajdhaka.dav, 165 .

23673 ; meetshrotriya;  221965; 1592yahoo.in
[email protected]
[email protected]
[email protected]
[email protected]

[email protected]
These are incorrect:

065
kartikkumar781r2#
1975, 123

원하는 출력:

Number of lines having one or more digits are: 4
Digits found:
29809
165
23673
221965
065
1975
123

답변1

노력하다:

printf '
Number of lines having one or more digits are: %d
Digits found:
%s
' "$(grep -Ecw '[[:digit:]]+' infile)" "$(grep -Eow '[[:digit:]]+' infile)"

답변2

이 답변은 귀하가 제공한 예를 기반으로 합니다. 이는 숫자가 둘 중 하나와 다른 구분 기호를 사용하여
파일 전체에 분산되어 있으면 스크립트 가 불완전한 결과를 제공할 수 있음을 의미 합니다. 어쨌든 저는 이 솔루션을 공백, 쉼표 및 세미콜론의 조합을 허용하는 구분 패턴으로 일반화합니다. 필요한 경우 다른 구분 기호를 쉽게 추가할 수 있습니다.example.txtspace,;

$ cat my_script.bash
#!/usr/bin/env bash

printf "Number of lines having one or more digits is: %s\n" \
    "$(grep -cE '(^| )[0-9]+( |,|;|$)' $1)"
printf "Digits found:\n"
printf "%s\n" "$(sed -E 's/ |\,|\;//g;' < <(grep -o -E '(^|( *|,|;)+)[0-9]+( |,|;|$)' $1))"

나는 그것이 완전히 가능하다고 확신 sed하지만 grep이 경우에는 너무 유혹적입니다.

사용하려면 파일을 my_script.bash실행 가능하게 만들고 다음을 실행하십시오.

$ chmod ug+x my_script.bash

$ my_script.bash example.txt
Number of lines having one or more digits are: 4
Digits found:
29809
165
23673
221965
065
1975
123 

답변3

\<(GNU grep, 왜냐하면 and )는 어떻습니까 \>?

$ grep -o '\<[0-9][0-9]*\>' example.txt 


29809
165
23673
221965
065
1975
123

답변4

그리고 perl:

perl -lne '
  if (@n = /\b\d+\b/g) {push @all, @n; $n++}
  END {print for "$n line(s) with numbers. Number(s):", @all}
  ' your-file

+d이것은 앞뒤에 1개 이상의 ( ) ASCII 십진수 시퀀스입니다.단어 b경계또는 IOW 앞이나 뒤에 ASCII 단어 문자( )가 없습니다 a-zA-Z0-9_.

관련 정보