Какие глобусы я могу использовать с grep в bash?
480
Hashim
Linux и Unix-подобные оболочки bash
позволяют использовать глобусы для аппроксимации имен файлов и упрощают поиск файлов. Я знаю о подстановочном знаке (*). Какие еще существуют глобусы, с bash
которыми я могу использовать grep
?
`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 ответов на вопрос
Похожие вопросы
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
9
grep все файлы .java в каталоге для конкретной строки
-
-
10
Как я могу найти в истории bash и повторно запустить команду?
-
2
Можно ли передать выходные данные одной команды двум другим командам?
-
8
Переименуйте группу файлов одной командой
-
2
Почему мой путь не обновляется * сейчас *?
-
5
Как удалить символическую ссылку на каталог?
-
8
Спаси меня от бессмысленного терминала
-
9
Как можно добавить номер строки и табуляцию к каждой строке текстового файла?