Попробуйте grep
все, что не =
:
# echo '9701=1??
9701=10.Pp
9701=1a 8a
9701=3.a_tt
9701=1/a -00
9701=Bg1998pps' | egrep -o '9701=[^=]{1,50}'
9701=1??
9701=10.Pp
9701=1a 8a
9701=3.a_tt
9701=1/a -00
9701=Bg1998pps
# echo '9701=Bg19=98pps' | egrep -o '9701=[^=]{1,50}'
9701=Bg19
## If you too need to include equal char
# echo '9701=Bg19= 98pps' | egrep -o '9701=.{1,50}'
9701=Bg19= 98pps
Использование tr
, sort
иuniq
:
$ tr -s ' ' '\n' <file | sort | uniq -c
1
17 1
5 11
1 111
2 11111
1 1111111
1 11111111
Это дает вам количество для одной пустой строки, а также (первая строка в выводе выше ), но вы можете избежать этого с помощьюsed
:
$ tr -s ' ' '\n' <file | sed '/^$/d' | sort | uniq -c
17 1
5 11
1 111
2 11111
1 1111111
1 11111111
Конвейер изменяет все пробелы на новые строки, сортирует полученные строки и подсчитывает количество вхождений каждой строки.
Я бы не стал использовать grep для этого, но с awk:
$ a="11111 1 11 1111111 1 1 1 1 1 1 1 111 1 1 1 1 11 11111111 1 11 1 11 11 1 11111 1 1"
$ awk '{for (i=1;i<=NF;i++) ++seen[$i]}END{for (k in seen) print k,"found:"seen[k]}' <<<"$a"
1 found:17
11 found:5
111 found:1
11111 found:2
1111111 found:1
11111111 found:1
Эта однострочная демонстрация должна работать со всем вашим файлом (замените <<<"$a"
на yourfile
)