Grep: количество совпадений в строке

Я пытаюсь получить количество совпадений (в данном случае вхождения { или }) в каждой строке .файл tex.

Я знаю, что -o флаг возвращает только совпадение, но он возвращает каждое совпадение в новой строке, даже в сочетании с -n флаг. Я не знаю ничего, что я мог бы передать это, чтобы подсчитать повторы. The -c флаг возвращает только общее количество совпадений во всем файле-может быть, я мог бы передать одну строку за раз grep?

7
задан Chris H
16.03.2023 15:59 Количество просмотров материала 3586
Распечатать страницу

3 ответа

grep -o -n '[{}]' <filename> | cut -d : -f 1 | uniq -c

вывод будет примерно таким:

3 1
1 2

означает 3 вхождения в первой строке и 1 во второй.

принято от https://stackoverflow.com/a/15366097/3378354 .

19
отвечен Moebius 2023-03-17 23:47

после прочтения различных решений, я думаю, что это самый простой подход к проблеме:

while read i; do echo $i |grep -o "matchingString"| wc -l;  done < input.txt
3
отвечен alfredocambera 2023-03-18 02:04

использует grep требование?  Вот альтернатива:

sed 's/[^{}]//g' your_file | awk '{print NR, length }'

sed удаляет все символы, кроме { и } (то есть, оставляя только { и } символы), а затем awk подсчет символов в каждой строке (которые являются только { и } символы).  Подавлять линии без совпадений,

sed 's/[^{}]//g' your_file | awk '/./ {print NR, length }'

обратите внимание, что мое решение предполагает (требует), что строки, которые вы ищете один письмена.  Ответ Мебиуса легче адаптируется к многосимвольным строкам.  Кроме того, ни один из наших ответов исключает кавычки или экранированные вхождения интересующих символов/строк; например,

{ "nullfunc() {}" }

считается содержащим четыре символа скобки.

1
отвечен Scott 2023-03-18 04:21

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх