Grep для строки во всех файлах в dir, добавить имя выходного файла в txt, если найден? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть каталог, который содержит 2000 файлов. Мне нужно знать, какие файлы в каталоге содержат строку «пример» в файле, и вывести имя файла в файл list.txt, который существует, поэтому я получаю list.txt, содержащий имена файлов всех файлов содержащий "пример".

#!/bin/bash

files = /dir/*

for f in $files
    do
        if grep -i "example" $f; then
            echo "found"
            echo $f >> ~/list.txt
        fi
done

Поэтому я хочу, чтобы list.txt содержал список файлов со строкой "example" в их содержимом.

Я не получаю добавление (list.txt остается пустым), но я получаю эхо-запрос "найдено" для количества экземпляров.

Ответы [ 3 ]

1 голос
/ 10 июля 2019

Попробуйте указать путь к каталогу в метках "" следующим образом:

#!/bin/bash

files="/path/to/files/*"
for f in $files
  do
    if grep -i "example" $f; then
    echo "found"
    echo $f >> ~/found.txt
    fi
  done

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

1 голос
/ 10 июля 2019
grep -i -l 'example' -- * >> ~/list.txt

или

grep -i -l 'example' ./* >> ~/list.txt
1 голос
/ 10 июля 2019

Вы можете использовать grep -l для этой цели: (показать только имя файла соответствующего файла):

grep -i -l "example" * >>~/list.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...