Я пытаюсь получить количество совпадений (в данном случае вхождений {
или }
) в каждой строке файла .tex.
Я знаю, что -o
флаг возвращает только совпадение, но он возвращает каждое совпадение на новой строке, даже в сочетании с -n
флагом. Я не знаю ничего, что я мог бы передать это через подсчет повторов. -c
Флаг только возвращает общее количество совпадений весь файл - возможно , я мог бы труба одна линия в то время , чтобы Grep?
sort
не является строго необходимым, поскольку вывод grep сортируется по номеру строки, но я думаю, что это хорошая практика раньшеuniq
.regex
потому что регулярное выражение является легкой частью.sort -n
? Разве это не выходит в порядке номеров строк в любом случае?sort -n
не обязательно. Спасибо.Прочитав различные решения, я думаю, что это самый простой подход к проблеме:
источник
grep -o "matchingString" <<< $i | wc -l
.Используете
grep
ли вы требование? Вот альтернатива:Эти
sed
полоски из всех , кроме символов{
и}
(то есть, оставив только{
и}
символы), а затемawk
подсчитывать символы в каждой строке (которые только{
и}
символы). Чтобы подавить строки без совпадений,Обратите внимание, что мое решение предполагает (требует), что строки, которые вы ищете, являются одиночными символами. Ответ Мебиуса легче адаптировать к многосимвольным строкам. Кроме того, ни один из наших ответов не исключает цитируемые или экранированные вхождения символов / строк, представляющих интерес; например,
будет считаться содержать четыре символа скобки.
источник
grep
на самом деле это не было требованием, я просто начал искать решение, потому что оно дало мне что-то близкое. У меня никогда не было необходимости в awk, поэтому, если бы я не использовал ответ выше, я бы использовал это как шанс для экспериментов - я все еще могу. Что я не смог уточнить (но это не влияет ни на один из ответов), так это то, что я хотел запустить скрипт один раз для каждой скобки, чтобы помочь мне отследить несоответствие (в источнике LaTeX, здесь для таблицы), где большинство пар встречаются в одна строка.sed 's/{[^{}]*}//g' your_file | grep –n '[{}]'
, гдеsed
вырезаются (совпадают) пары. Если у вас есть вложенные пары, используйтеsed 's/{[^{}]*}//g;s/{[^{}]*}//g;s/{[^{}]*}//g;…' …
, повторяяs/{[^{}]*}//g
столько раз, сколько ваша самая глубокая вложенность.