Как я могу подсчитать вхождения строки в файл?
Просто возьмите этот код в качестве примера. Притворяясь, что это 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
Ответы
Ответ 1
Это будет выводить количество строк, содержащих вашу строку поиска.
grep -c "echo" FILE
Это, однако, не будет подсчитывать количество вхождений в файле (т.е. если у вас есть эхо несколько раз в одной строке).
изменить:
После небольшой игры вы можете получить количество вхождений, используя этот грязный маленький код:
sed 's/echo/echo\n/g' FILE | grep -c "echo"
Это в основном добавляет новую строку после каждого экземпляра эха, поэтому каждый из них находится в своей собственной строке, позволяя grep подсчитывать эти строки. Вы можете уточнить регулярное выражение, если хотите только слово "эхо", в отличие от "эхо", например.
Ответ 2
Число строк (не строк) может быть получено с помощью 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
Ответ 3
Я принимаю некоторые догадки здесь, потому что я не совсем понимаю, о чем вы спрашиваете.
Я думаю, что то, что вы хотите, - это подсчет количества строк, на которых в данном файле появляется символ "эхо".
Я вложил ваш образец текста в файл с именем 6741967
.
Сначала grep
находит совпадения:
[email protected]:tmp$grep echo 6741967
echo "Preparing to add a new user..."
echo "1. Add user"
echo "2. Exit"
echo "Enter your choice: "
Во-вторых, используйте wc -l
для подсчета строк
[email protected]:tmp$grep echo 6741967 | wc -l
4
Ответ 4
если вы просто хотите количество вступлений, тогда вы можете это сделать, $ grep -c "string_to_count" file_name