Что такое альтернативные инструменты для поиска файлов в полном содержании?

Вот быстрое и грязное решение только сохранить последнюю строку вывода в файле журнала:

ping localhost | 
  while IFS= read -r line; do 
    printf '%s\n' "$line" > log.txt; 
  done

Остерегайтесь этого, у Вас теперь, вероятно, есть все виды условий состязания при попытке получить доступ к файлу для чтения. "Блокировка" файла от взаимного доступа могла бы помочь. Для получения дополнительной информации о соединении этого вопроса stackoverflow мог бы быть хорошим началом: Как делают я синхронизируюсь (блокируют/разблокируют) доступ к файлу в ударе из нескольких сценариев?

0
12.02.2014, 23:40
4 ответа

grep

Если Вы только интересуетесь названиями файлов, которые содержат строку поиска в 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

Если Вы хотите искать шаблоны через несколько строк, можно использовать pcregrep наряду с -M переключатель, для мультилинии.

$ pcregrep -M "11[\n,]*.*12" sample*
sample1.txt:11
12
sample2.txt:11
12
2
28.01.2020, 02:15

Для кода существует ack, это является потрясающим и может быть определенным для языка или агностическим языком.

1
28.01.2020, 02:15
  • 1
    я не думаю, что это не ориентированная строка. Так как Вы передаете, каким количеством строк вокруг соответствия для отображения это кажется мне, это работает линию за линией, –  Jim 12.02.2014, 23:45
  • 2
    , возможно, дают пример того, чему Вы пытаетесь соответствовать? поиски –  OneOfOne 12.02.2014, 23:47
  • 3
    ack основаны на строке, точно так же, как grep. –  daniel kullmann 12.02.2014, 23:48

Perl дает Вам, "файл хлебает" режим:

echo "foo
bar
baz" |
perl -0777 -ne 'print "found it" if /foo\s+bar/'

-0777 опция является ключом. Целый файл читается в память, где можно воздействовать на него.

2
28.01.2020, 02:15

GNU coreutils документация приятно организован вокруг файлов, строк, полей, и символьно-ориентированных операций и инструментов, которые работают над ними. Проверьте его здесь.

1
28.01.2020, 02:15

Теги

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