Может ли grep выводить совпадающее содержимое и полное количество вместе? Если нет, то как?

ls -l показывает размеры файлов только на 1 уровне.

du рекурсивно покажет размеры папок (сумма размеров файлов в папке).

0
21.11.2017, 12:43
1 ответ

Всегда можно сделать:

grep -o... | awk '{print};END{if (NR) print "\n" NR " matched."}'

Или сделать все это в awk(, что также позволит избежать -oи \+GNUизмов):

awk 'match($0, /^[[:alpha:]_]+[[:blank:]]*\([[:blank:]]*\)/) {
       print substr($0, RSTART, RLENGTH)
       n++
     }
     END{if (n) print "\n" n " matched.")'

илиperl:

perl -lne 'for (/^\w+\h*\(\h*\)/g) {print; $n++}
           END {print "\n$n matched." if $n}'

(обратите внимание, что в этом случае \wограничен буквами ASCII, добавьте -Mopen=locale, чтобы включить любую букву в любом алфавитном письме в соответствии с локалью, как в grepилиawk(некоторыеawk)подходы)

Что касается вашего вопроса 2, это потому, что bash(, в отличие от zsh), не ожидает команд, запущенных в процессе подстановки, вызывая такого рода проблемы. См. Вывод замены процесса не соответствует порядку для получения более подробной информации.

3
28.01.2020, 02:24

Теги

Похожие вопросы