Найдите определенную строку в каталоге
Я хочу сделать следующее:
cat *.xml | grep some_string_here
Это говорит мне, существует ли конкретная строка в XML-файле в каталоге. К сожалению, это не говорит мне, какой файл.
как я могу сделать это лучше? cat
Команда не видит меня, чтобы иметь переключатель, который добавляет префикс имени файла к выводу...
4 ответа
cat
не нужно (UUOC!) grep
обычно говорит вам, в каком файле была найдена совпавшая строка, когда используется следующим образом:
grep some_string_here *.xml
Вы также можете использовать -H
переключиться всегда на это:
grep -H some_string_here *.xml
Вам нужно сделать:
grep some_string_here *.xml
вместо этого grep автоматически добавит имя файла к каждому совпадению.
Просто используйте grep
grep some_string *.xml
На выходе будет что-то вроде
a.xml: string containing some_string
xyzzy.xml:some_string in a different line
Если файл содержит более одного вхождения some_string, каждое вхождение будет напечатано. Если вы используете
grep -l some_string *.xml
будет напечатано только имя файла.
grep some_string_here /dev/null *.xml
... это небольшое улучшение по сравнению с другими предложениями, указанными выше, поскольку оно гарантирует, что имя файла, содержащего совпадение, всегда печатается, даже если текущий каталог содержит только один файл XML.