Стандартные подстановочные знаки (также называемые шаблонами глобализации) используются различными утилитами командной строки для работы с несколькими файлами.
Стандартные подстановочные знаки используются практически любой командой (включая mv, cp, rm и многие другие).
(question mark)
это может представлять любой отдельный символ. Если вы указали что-то в командной строке, как "hd?" GNU / Linux будет искать hda, hdb, hdc и любую другую букву / цифру между az, 0-9.
*(asterisk)
это может представлять любое количество символов (включая ноль, другими словами, ноль или более символов). Если вы указали «cd *», он будет использовать «cda», «cdrom», «cdrecord» и все, что начинается с «cd», включая сам «cd». «m * l» может означать мельницу, мулл, мл и все, что начинается с m и заканчивается l.
[ ] (square brackets)
указывает диапазон. Если вы сделали m [a, o, u] m, он может стать: mam, mum, mom, если вы сделали: m [ad] m, он может стать всем, что начинается и заканчивается m и имеет любой символ от a до d между ними. Например, это будет работать: мам, мбм, мсм, мдм. Этот тип подстановочных знаков указывает отношение «или» (вам нужен только один для сопоставления).
{ } (curly brackets)
термины разделены запятыми, и каждый термин должен быть именем чего-либо или подстановочным знаком. Этот подстановочный знак будет копировать все, что соответствует либо подстановочным знакам (символам), либо точному имени (ям) (отношение «или», одно или другое).
Например, это будет правильно:
cp { .doc, .pdf} ~
Это скопирует все, что заканчивается на .doc или .pdf, в домашний каталог пользователей. Обратите внимание, что пробелы не допускаются после запятых (или где-либо еще).
[!]
Эта конструкция аналогична конструкции [], за исключением того, что вместо совпадения с любыми символами в скобках она будет соответствовать любому символу, если она не указана между [и]. Это логическое НЕ. Например, rm myfile [! 9] удалит все myfiles * (т.е. myfiles1, myfiles2 и т. Д.), Но не удалит файл с номером 9 в любом месте его имени.
\ (backslash)
используется в качестве символа «escape», т.е. для защиты последующего специального символа. Таким образом, «\» выполняет поиск обратной косой черты. Обратите внимание, что вам может понадобиться использовать кавычки и обратную косую черту.
Стоит отметить, что apt-get removeтребуются имена пакетов , а не имена файлов, что делает расширение подстановочного знака в оболочке в значительной степени бесполезным. Если вы хотите удалить диапазон пакетов, вам нужно использовать полное регулярное выражение, заключенное в соответствующие кавычки, чтобы оболочка не пыталась интерпретировать его как глобус (например apt-get remove 'gnome.*').
4
Standard wildcards are used by nearly any command (including mv, cp, rm and many others).=> ЛОЖЬ. эти подстановочные знаки расширяются оболочкой, и команда получает результат расширения (т. е. файлы, соответствующие шаблону) вместо шаблона. (если нет файла, соответствующего шаблону, тогда этот шаблон будет передан непосредственно в команду)
Карлос Кампдеррос
17
Вообще говоря, в Bash a ?- это шаблон глобуса, который расширяется до произвольного символа.
Так что это бесполезно / ненужно в моем случае, верно?
Ooker
Да. Фактически это было отредактировано из ответа, с которым вы связались, когда задали свой вопрос. :)
Malte Skoruppa
1
Не могу поверить: -o
Ooker
1
Даже если они были правильными подстановочными знаками, этого использования следует избегать без цитирования. apt-get понимать RE, но если gnome1в текущем каталоге существует файл с именем , оболочка раскроет его, прежде чем apt-get сможет его увидеть.
apt-get remove
требуются имена пакетов , а не имена файлов, что делает расширение подстановочного знака в оболочке в значительной степени бесполезным. Если вы хотите удалить диапазон пакетов, вам нужно использовать полное регулярное выражение, заключенное в соответствующие кавычки, чтобы оболочка не пыталась интерпретировать его как глобус (напримерapt-get remove 'gnome.*'
).Standard wildcards are used by nearly any command (including mv, cp, rm and many others).
=> ЛОЖЬ. эти подстановочные знаки расширяются оболочкой, и команда получает результат расширения (т. е. файлы, соответствующие шаблону) вместо шаблона. (если нет файла, соответствующего шаблону, тогда этот шаблон будет передан непосредственно в команду)Вообще говоря, в Bash a
?
- это шаблон глобуса, который расширяется до произвольного символа.Например:
Это сродни a
*
, но*
расширение расширяется до 0 или более символов, в то время как?
расширение расширяется до ровно одного (произвольного) символа.Хотя в вашем особом случае
?
команда была явно опечаткой.источник
apt-get
понимать RE, но еслиgnome1
в текущем каталоге существует файл с именем , оболочка раскроет его, прежде чем apt-get сможет его увидеть.