Вы можете разделить ввод с помощью tee
и извлечь знаки препинания и alnum по отдельности.
echo "Helo, world!" |
{
tee >(tr -c '[:alnum:]' '\n' >&3) |
tr -c '[:punct:]' '\n'
} 3>&1 |
sed '/^$/d' |
sort | uniq -c | sort -nr | head
должен вывести:
1 world
1 Helo
1 !
1 ,
Короткий сценарий sed
также работает :
echo "Helo, world!
OK!" |
sed '
s/\([[:alnum:]]\+\)\([^[:alnum:]]\)/\1\n\2/g
s/\([[:punct:]]\+\)\([^[:punct:]]\)/\1\n\2/g
s/[^[:punct:][:alnum:]]/\n/g
' |
sed '/^$/d' |
sort | uniq -c | sort -nr | head
должен вывести:
2 !
1 world
1 OK
1 Helo
1 ,