Используйте команду grep и найдите

Взгляните на Ubuntu JEOS (Как раз достаточно Операционной системы).

4
12.09.2012, 01:33
3 ответа

Если Ваши результаты поиска уверены обратным каналам без пробелов, Вы могли бы использовать xargs как это:

locate my.cnf | xargs grep user

Однако необходимо привыкнуть защищать себя для обработки случая, где путь или имя файла могли бы содержать пространство путем сообщения xargs использовать null как разделитель и сообщение locate (или безотносительно программы Вы используете для возвращаемых строк) чтобы также отправить это как разделитель как это:

locate -0 my.cnf | xargs -0 grep user

Это работало бы, даже если бы Ваш путь включал пробелы как /name with space/my.cnf.

9
27.01.2020, 20:47
  • 1
    , Немного более идиоматичный, чем мой. –  nikitautiu 10.09.2012, 18:55
  • 2
    Вы могли бы хотеть locate my.cnf | xargs grep -H user так, чтобы выходной отчет о строках, в котором был найден файл (файлы) соответствие. –  StarNamer 11.09.2012, 02:20
  • 3
    я использовал бы locate -0 my.cnf | xargs -0 -r grep user в случае, если любые имена файлов имели пробелы и т.д. в них. Обратите внимание что не все версии locate поддерживайте -0 или --null опция для завершенного пустым указателем вывода. mlocate делает. IIRC, GNU располагается, делает также. –  cas 11.09.2012, 03:50
  • 4
    @vitiv: это не немного больше idomatic, Ваш просто не работает.Попробуйте. Даже когда Вы фиксируете его, затем необходимо добавить, что еще больше фиксирует для обработки путей с пробелами. К тому времени, когда это на самом деле работает, Ваш будет большим количеством idomatic, хотя в более сложной установке это мог также быть лучший выбор. –  Caleb 12.09.2012, 01:47

Если я понимаю правильно, Вы могли бы сделать что-то вроде этого:

#!/bin/sh
typeset what1=$1
typeset what2=$2
[ "$#" -eq 2 ] || { echo "Two arguments expected"; exit 1; }
locate ${what1} | while read file; do
    grep ${what2} ${file} /dev/null
    done

Это ищет файлы, соответствующие locate аргумент (what1) для строки, которая соответствует what2. dev/null силы аргумента grep сообщить об имени файла соответствия.

1
27.01.2020, 20:47
  • 1
    Интересный взлом путем добавления /dev/null, хотя можно также повторить имя файла сами. –  Caleb 12.09.2012, 01:50
  • 2
    @Caleb: Да я, возможно, добавил echo ${file} но мне не нравится иметь необходимость породить еще один процесс просто с этой целью. взгляд –  JRFerguson 12.09.2012, 02:03
  • 3
    обычно существует оболочка, встроенная для echo таким образом, это не порождает процесс так или иначе. –  Caleb 12.09.2012, 02:26
  • 4
    @Caleb: А-ч, да, я забыл это.Спасибо! –  JRFerguson 12.09.2012, 02:27
  • 5
    На самом деле настоящей проблемой является гимнастика того, чтобы заставлять это сделать эхо перед соответствием, только если существует соответствие. Это может быть сделано, но это довольно ужасно. Обычно я не хочу соответствий вообще однако, таким образом, это grep -q "#what2" && [other action]. Как я сказал, который является интересным взломом однако, и я буду помнить это, может пригодиться, хотя я склонен не любить вещи, что их функция не с готовностью очевидна для кого-то читающего код. –  Caleb 12.09.2012, 02:31

Острота:

for file in $(locate my.cnf) ; do grep -r user "$file" ; done

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

1
27.01.2020, 20:47

Теги

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