Какие глобусы я могу использовать с grep в bash?

480
Hashim

Linux и Unix-подобные оболочки bashпозволяют использовать глобусы для аппроксимации имен файлов и упрощают поиск файлов. Я знаю о подстановочном знаке (*). Какие еще существуют глобусы, с bashкоторыми я могу использовать grep?

0
`grep` использует регулярные выражения; они отличаются от шаров. Некоторые реализации `grep` используют глобусы с такими параметрами, как` --exclude = GLOB`, но я думаю, что эти параметры не требуются POSIX. Таким образом, вы не должны предполагать, что grep знает что-либо о глобусах. Kamil Maciorowski 6 лет назад 2
@KamilMaciorowski Я знаю разницу между globs и regex, но у меня сложилось впечатление, что GNU grep поддерживает glob по умолчанию (даже с `grep -F`), как и большинство других команд в` bash`. Hashim 6 лет назад 0
"как и большинство других команд в` bash` "-` grep` - это не "команда в` bash` ", а отдельный исполняемый файл, который вы можете запустить без оболочки, если знаете как. Вы должны тщательно различать глобусы, развернутые с помощью `bash`, прежде чем` grep` (или любая команда, вызванная в оболочке) даже запустится из глобусов, регулярных выражений или чего-либо подобного, что поддерживается самой командой. Kamil Maciorowski 6 лет назад 2
Например, найти. -name` поддерживает глобальное сопоставление с образцом. [Посмотрите, что происходит] (https://superuser.com/q/1217773/432690), когда вы позволите оболочке расширять их. Kamil Maciorowski 6 лет назад 0
Итак, вы говорите, что `grep` сам по себе не использует глобусы, и поэтому глобусы нельзя использовать с ним? Что-то вроде `grep -f * .txt` не возвращает текстовые файлы, или` grep Match * file.txt` не возвращает Match1, Match2, Match3 и т. Д.? Hashim 6 лет назад 0
Оболочка раскроет глобусы перед тем, как передать их `grep` в списке аргументов. Таким образом, `grep -f * .txt` будет расширяться до чего-то вроде` grep -f file1.txt file2.txt file3.txt`, а `grep` будет интерпретировать` file1.txt` как файл для чтения шаблонов поиска, и `file2.txt` и` file3.txt` в качестве файлов для поиска этих шаблонов. `grep` не имеет ни малейшего представления о том, что был задействован шаблон glob, он только знает, что он получил строки" -f "," file1.txt "," file2.txt "и" file3.txt "в качестве аргументов. Gordon Davisson 6 лет назад 2
Вызвать `set -x` (используйте` set + x`, чтобы отменить это позже). Затем запустите `grep -f * .txt 1> / dev / null 2> / dev / null` (перенаправления просто для того, чтобы сама команда отключилась). Все, что вы видите после `+`, является действительной командой. Попробуйте это в каталогах с 0, 1 или более соответствующими файлами. Вы увидите, какие аргументы действительно получает grep. Kamil Maciorowski 6 лет назад 1

0 ответов на вопрос