Нахождение пунктуации и подсчет числа каждого из командной строки Unix - PullRequest
2 голосов
/ 04 ноября 2011

Я хочу найти все знаки препинания, используемые в моем файле .txt, и указать количество вхождений каждого Как бы я поступил так? Я новичок в этом, но я пытаюсь учиться! Это не домашняя работа! Я сейчас занимаюсь исследованиями grep и sed.

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Используйте sed, tr, sort и uniq (и без perl):

sed -E 's/[^[:punct:]]//g;s/(.)/\1x/g' myfile.txt | tr 'x' '\n' | sort | uniq -c

Я сделал это так (sed + tr), чтобы он работал как на Unix, так и на Mac.Mac требует встроенного перевода строки в команде sed, но unix может использовать \n.Таким образом, это работает везде.

Это будет работать на не-Mac Unix:

sed -E 's/[^[:punct:]]//g;s/(.)/\1\n/g' myfile.txt | sort | uniq -c
2 голосов
/ 04 ноября 2011
$ perl -CSD -nE '$seen{$1}++ while /(\pP)/g; END { say "$_ $seen{$_}" for keys %seen }'  sometextfile.utf8

Как и в

$ perl -CSD -nE '$seen{$1}++ while /(\pP)/g; END { say "$_ $seen{$_}" for keys %seen }' programming_perl_4th_edition.pod | sort -k2rn
, 21761
. 19578
; 10986
( 8856
) 8853
- 7606
: 7420
" 7300
_ 5305
’ 4906
/ 4528
{ 2966
} 2947
\ 2258
@ 2121
# 2070
* 1991
' 1715
“ 1406
” 1404
[ 1007
] 1003
% 881
! 838
? 824
& 555
— 330
‑ 72
– 41
‹ 16
› 16
‐ 10
⁂ 10
… 8
· 3
「 2
」 2
« 1
» 1
‒ 1
― 1
‘ 1
• 1
‥ 1
⁃ 1
・ 1

Если вы хотите не просто пунктуацию, а пунктуацию и символы, используйте [\pP\pS] в своем шаблоне.Не используйте классы POSIX старого стиля, что бы вы ни делали.

...