Как искать содержимое файла в каталоге для определенного шаблона, а затем возвращать (перенаправлять) имя файла в другой файл?

Я хочу выполнить следующую задачу с помощью команды bash:

найти все файлы в /etc, содержащие строку «10.17.1» или «130.236.189» и вывести имена файлов в другой файл.

Я пытаюсь сделать это, используя egrep.

5
задан 15 April 2017 в 18:57

5 ответов

Вы можете использовать

sudo egrep -rl '(10\.17\.1|130\.236\.189)' /etc > newfile

Примечания

Для просмотра некоторых файлов вам нужно sudo. -l печатать только имена файлов, а не соответствующие строки -r рекурсивный поиск. Удалите, если вы хотите проверить файлы на верхнем уровне \. match literal .; без экранирования, . соответствует любому символу. a|b соответствуют a или b. Скобки в этом примере лишние, потому что в регулярном выражении нет ничего другого. 'foo|bar' совпадает с foo или bar так же, как '(foo|bar)'. Но я включил их, потому что я думаю, что это хорошая практика: круглые скобки определяют область для начала / остановки чередования, например 'foo bar|baz' соответствует foo bar или baz, тогда как 'foo (bar|baz)' соответствует foo bar или foo baz.
5
ответ дан 22 May 2018 в 23:36
  • 1
    Периоды следует избегать, иначе они будут соответствовать любому персонажу, который я думаю? Или используйте -F, чтобы совместить строку. – steeldriver 15 April 2017 в 23:12
  • 2
    @steeldriver oops, спасибо за это! – Zanna 15 April 2017 в 23:13

Вы можете использовать

sudo egrep -rl '(10\.17\.1|130\.236\.189)' /etc > newfile

Примечания

Для просмотра некоторых файлов вам нужно sudo. -l печатать только имена файлов, а не соответствующие строки -r рекурсивный поиск. Удалите, если вы хотите проверить файлы на верхнем уровне \. match literal .; без экранирования, . соответствует любому символу. a|b соответствуют a или b. Скобки в этом примере лишние, потому что в регулярном выражении нет ничего другого. 'foo|bar' совпадает с foo или bar так же, как '(foo|bar)'. Но я включил их, потому что я думаю, что это хорошая практика: круглые скобки определяют область для начала / остановки чередования, например 'foo bar|baz' соответствует foo bar или baz, тогда как 'foo (bar|baz)' соответствует foo bar или foo baz.
5
ответ дан 18 July 2018 в 14:54

Вы можете использовать

sudo egrep -rl '(10\.17\.1|130\.236\.189)' /etc > newfile

Примечания

Для просмотра некоторых файлов вам нужно sudo. -l печатать только имена файлов, а не соответствующие строки -r рекурсивный поиск. Удалите, если вы хотите проверить файлы на верхнем уровне \. match literal .; без экранирования, . соответствует любому символу. a|b соответствуют a или b. Скобки в этом примере лишние, потому что в регулярном выражении нет ничего другого. 'foo|bar' совпадает с foo или bar так же, как '(foo|bar)'. Но я включил их, потому что я думаю, что это хорошая практика: круглые скобки определяют область для начала / остановки чередования, например 'foo bar|baz' соответствует foo bar или baz, тогда как 'foo (bar|baz)' соответствует foo bar или foo baz.
5
ответ дан 24 July 2018 в 20:31

Вы можете использовать

sudo egrep -rl '(10\.17\.1|130\.236\.189)' /etc > newfile

Примечания

Для просмотра некоторых файлов вам нужно sudo. -l печатать только имена файлов, а не соответствующие строки -r рекурсивный поиск. Удалите, если вы хотите проверить файлы на верхнем уровне \. match literal .; без экранирования, . соответствует любому символу. a|b соответствуют a или b. Скобки в этом примере лишние, потому что в регулярном выражении нет ничего другого. 'foo|bar' совпадает с foo или bar так же, как '(foo|bar)'. Но я включил их, потому что я думаю, что это хорошая практика: круглые скобки определяют область для начала / остановки чередования, например 'foo bar|baz' соответствует foo bar или baz, тогда как 'foo (bar|baz)' соответствует foo bar или foo baz.
5
ответ дан 31 July 2018 в 12:33

Вы можете использовать

sudo egrep -rl '(10\.17\.1|130\.236\.189)' /etc > newfile

Примечания

Для просмотра некоторых файлов вам нужно sudo. -l печатать только имена файлов, а не соответствующие строки -r рекурсивный поиск. Удалите, если вы хотите проверить файлы на верхнем уровне \. match literal .; без экранирования, . соответствует любому символу. a|b соответствуют a или b. Скобки в этом примере лишние, потому что в регулярном выражении нет ничего другого. 'foo|bar' совпадает с foo или bar так же, как '(foo|bar)'. Но я включил их, потому что я думаю, что это хорошая практика: круглые скобки определяют область для начала / остановки чередования, например 'foo bar|baz' соответствует foo bar или baz, тогда как 'foo (bar|baz)' соответствует foo bar или foo baz.
5
ответ дан 31 July 2018 в 23:32

Другие вопросы по тегам:

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