Вопросы о find и grep

Вы можете сделать это, открыв терминал и набрав

  wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
     chmod +x speedtest-cli
    ./speedtest-cli

Например:

[raja@localhost ~]$     ./speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from BSNL (XXX.XXX.XXX.XXX)...
Selecting best server based on ping...
Hosted by BEAM TELECOM (Hyderabad) [19.00 km]: 39.975 ms
Testing download speed........................................
Download: 1.16 Mbit/s
Testing upload speed..................................................
Upload: 0.38 Mbit/s
[raja@localhost ~]$

Спасибо LinOxide.

0
21.11.2018, 23:50
2 ответа

Используйте grep -o theи подсчитайте количество строк, которые будут сгенерированы:

find. -name "*.txt" -type f -printf "%p\t" \
    -exec sh -c 'grep -o "the" "$0" | wc -l' {} \; 

grep -oвозвращает каждое совпадение в каждой строке, в отдельных строках (возвращается одно совпадение на каждую строку вывода ).

Вы можете дополнительно использовать -wiс grep, чтобы включитьThe(регистр -нечувствительность )и исключить совпадения типа theвtheory(полное совпадение слов ).

0
28.01.2020, 04:27

Поскольку вы уже используете расширения GNU (-printf), с GNU awkвы можете сделать:

find. -name '*.txt' -size +2c -readable -type f -exec gawk -v RS=the '
   ENDFILE {print FILENAME "\t" (FNR - ($0 != ""))}' {} +

То есть используйте txtв качестве разделителя записей и сообщайте количество записей после обработки каждого файла. Но не считайте дополнительную запись, которая может (и вообще будет )появляться после последнего вхождения txt.

0
28.01.2020, 04:27

Теги

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