Используйте находят, туалет и sed для подсчета строк

Ничто я знаю, но пишу макрос для обертывания его в любой тег, который Вы хотите, не должно быть твердым. У меня есть подобный, который обернет мой выбор в блок региона.

24
задан Berlin Brown 11 September 2009 в 17:24
поделиться

6 ответов

Вы также можете получить хорошее форматирование из wc с помощью:

wc `find -name '*.m'`
48
ответ дан 28 November 2019 в 22:20
поделиться

Вы можете cat все файлы через один wc экземпляр, чтобы получить общее количество строк:

find . -name '*.m' -exec cat {} \; | wc -l
6
ответ дан 28 November 2019 в 22:20
поделиться

вы также можете использовать sed для подсчета строк вместо wc:

 find . -name '*.m' -exec sed -n '$=' {} \;

где '$ =' - это «специальная переменная», которая хранит количество строк

РЕДАКТИРОВАТЬ

, вы также можете попробовать что-нибудь вроде sloccount

4
ответ дан 28 November 2019 в 22:20
поделиться

Хм, решение с cat может быть проблематичным, если у вас много файлов, особенно больших.

Второе решение не дает общее количество, только строки на файл, как я тестировал.

Я предпочитаю что-то вроде этого:

find . -name '*.m' | xargs wc -l | tail -1

Это сделает работу быстро, независимо от того, сколько у вас файлов и какого размера.

2
ответ дан 28 November 2019 в 22:20
поделиться

Для больших каталогов мы должны использовать:

find . -type f -name '*.m' -exec sed -n '$=' '{}' + 2>/dev/null | awk '{ total+=$1 }END{print total}' 

# alternative using awk twice
find . -type f -name '*.m' -exec awk 'END {print NR}' '{}' + 2>/dev/null | awk '{ total+=$1 }END{print total}' 
1
ответ дан 28 November 2019 в 22:20
поделиться

sed не является подходящим инструментом для подсчета. Вместо этого используйте awk:

find . -name '*.m' -exec awk '{print NR}' {} +

Использование + вместо \; заставляет find вызывать awk каждые N найденных файлов (как с xargs).

1
ответ дан 28 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

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