Как я могу посчитать вхождения строки в файле? - PullRequest
60 голосов
/ 19 июля 2011

Просто возьмите этот код в качестве примера.Притворяясь, что это HTML / текстовый файл, если я хотел бы узнать общее количество раз, которое появляется echo, как я могу это сделать, используя bash?

new_user()
{
    echo "Preparing to add a new user..."
    sleep 2
    adduser     # run the adduser program
}

echo "1. Add user"
echo "2. Exit"

echo "Enter your choice: "
read choice


case $choice in
    1) new_user     # call the new_user() function
       ;;
    *) exit
       ;;
esac 

Ответы [ 4 ]

131 голосов
/ 25 января 2013

Количество вхождений строк (не строк ) можно получить с помощью grep с параметром -o и wc (количество слов):

$ echo "echo 1234 echo" | grep -o echo
echo
echo
$ echo "echo 1234 echo" | grep -o echo | wc -l
2

Таким образом, полное решение вашей проблемы будет выглядеть так:

$ grep -o "echo" FILE | wc -l
76 голосов
/ 19 июля 2011

Будет выведено количество строк , которые содержат строку поиска.

grep -c "echo" FILE

Это, однако, не будет подсчитывать количество вхождений в файле (т. Е. Если у вас есть эхо несколько раз в одной строке).

редактировать:

Немного поиграв, вы можете получить количество вхождений, используя этот грязный кусочек кода:

sed 's/echo/echo\n/g' FILE | grep -c "echo"

Это, в основном, добавляет новую строку после каждого экземпляра эха, так что каждый из них находится на отдельной строке, что позволяет grep подсчитывать эти строки. Вы можете уточнить регулярное выражение, если вам нужно только слово «эхо», а не «эхо», например.

1 голос
/ 19 июля 2011

Я беру здесь некоторые догадки, потому что я не совсем понимаю, о чем вы спрашиваете.

Я думаю, что вы хотите подсчитать количество строк, на которых шаблон "эхо" появляется в данном файле.

Я вставил ваш образец текста в файл с именем 6741967.

Сначала grep находит совпадения:

james@Brindle:tmp$grep echo 6741967 
    echo "Preparing to add a new user..."
echo "1. Add user"
echo "2. Exit"
echo "Enter your choice: "

Во-вторых, используйте wc -l для подсчета строк

james@Brindle:tmp$grep echo 6741967  | wc -l
       4
0 голосов
/ 26 июня 2018

если вам нужно просто указать количество вхождений, вы можете сделать это: $ grep -c "string_to_count" имя_файла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...