Не являясь гуру в шелл, всё-же оставлю тут свои "5 коп."
grep, наверное, можно сравнить с поиском в текстовом документе. Если cat выводит на терминал содержимое файла, то grep фильтрует его.
Для примера выведем в терминал частоту процессора:
cat /proc/cpuinfo
Выведет нам полную таблицу данных процессора. Но нам нужно конкретное поле, а не 200 строк, потому фильтруем результат grep -ом:
cat /proc/cpuinfo | grep MHz
Теперь терминал выведет не весь текст, а только строки, в которых упоминается MHz
alie@0_о:~$ cat /proc/cpuinfo | grep MHz
cpu MHz : 2405.432
cpu MHz : 2405.432
cpu MHz : 2405.432
cpu MHz : 2405.432
Процессор у меня 4 -ядерный, потому в результате я получила 4 строки с указанной частотой.
Второй вариант - посчитать количество строк не выводя их в терминал. За такое условие отвечает опция -c или --count
cat /proc/cpuinfo | grep -c MHz
В ответ получаем:
alie@0_о:~$ cat /proc/cpuinfo | grep -c MHz
4
cat прочитал знакомый файл, grep -c подсчитал количество упоминаний MHz в файле и вывел результат.
Третий вариант - использование grep в "чистом виде":
Поиск строки в файле:
1 grep 'your_string' /your_dir/your_file
2 grep -c 'your_string' /your_dir/your_file
3 grep 'your_string' /your_dir/your_file | grep -v 'unwanted_string'
1. Поиск строк в файле и вывод в терминал
2. Подсчёт количества совпадений
3. Вывести совпадающие строки за исключением unwanted_string
Применение в скрипте:
#!/bin/bash
_VAR=$(cat /proc/cpuinfo | grep -c MHz)
echo "You have $_VAR kernels"
Во второй строке мы назначаем переменную, в третей - выводим результат.
Если мои 5коп. всё-же внесли некоторую ясность в вопрос - буду считать задачу выполненной ))