사용불다, 적어도 하나의 숫자(숫자는 하나 이상의 숫자로만 구성됨)를 포함하는 텍스트의 줄 수를 표시하고 싶습니다.
또한 감지된 숫자를 선으로 표시하고 싶습니다. 텍스트 파일 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.txt
space
,
;
$ 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_
.