Вот быстрое и грязное решение только сохранить последнюю строку вывода в файле журнала:
ping localhost |
while IFS= read -r line; do
printf '%s\n' "$line" > log.txt;
done
Остерегайтесь этого, у Вас теперь, вероятно, есть все виды условий состязания при попытке получить доступ к файлу для чтения. "Блокировка" файла от взаимного доступа могла бы помочь. Для получения дополнительной информации о соединении этого вопроса stackoverflow мог бы быть хорошим началом: Как делают я синхронизируюсь (блокируют/разблокируют) доступ к файлу в ударе из нескольких сценариев?
Если Вы только интересуетесь названиями файлов, которые содержат строку поиска в 1 раз, когда можно использовать grep
с -l
переключатель, чтобы сделать это.
Скажите, что у меня есть 2 файла, полные чисел.
$ seq 100 > sample1.txt
$ seq 100 > sample2.txt
Теперь, если я ищу тот файл случаи строки "10".
$ grep -l 10 sample*.txt
sample1.txt
sample2.txt
Это только возвратит файлы, которые содержат соответствие в 1 раз, даже если существует несколько строк то соответствие. Как доказательство, если я беру -l
выключите:
$ grep 10 sample*.txt
sample1.txt:10
sample1.txt:100
sample2.txt:10
sample2.txt:100
Если Вы хотите искать шаблоны через несколько строк, можно использовать pcregrep
наряду с -M
переключатель, для мультилинии.
$ pcregrep -M "11[\n,]*.*12" sample*
sample1.txt:11
12
sample2.txt:11
12
Для кода существует ack, это является потрясающим и может быть определенным для языка или агностическим языком.
Perl дает Вам, "файл хлебает" режим:
echo "foo
bar
baz" |
perl -0777 -ne 'print "found it" if /foo\s+bar/'
-0777
опция является ключом. Целый файл читается в память, где можно воздействовать на него.