Александър Иванов
Когато нещата не вървят
Какво е wildcard?
В игрите на карти wild card е нещо като жокер — карта, която можеш да използваш вместо всяка друга карта.
Информатиците наричат така символи, които могат да бъдат използвани вместо всеки друг символ, и са започнали да го изписват слято — wildcards. На български това можем да го преведем като общи или обобщаващи символи.
Обобщаващите символи са много полезни, когато трябва да претърсваме дълъг списък от текстови редове: най-често това са списъците с имена на файлове. Та затова обобщаващите символи се използват в командите (програмките) dir, ls, find, както и във файловите менажери при търсене и маркиране на файлове.
Има два обобщаващи символа:
? — замества какъвто и да било символ в дадена позиция;
* — замества каквато и да било поредица от символи в дадена позиция, включително липсата на символи (празна поредица).
Тези обяснения може да ти се сторят „абстрактни“, затова веднага преминавам към примери. А ти стартирай терминал (Command Prompt в Windows) и експериментирай с примерите, които давам. Променяй ги, измисляй си собствени примери.
$ ls *.???
ще изведе списък на всички файлове, чиито разширения са от три символа. Нали помниш? Точката е разделител между името на файла и разширението му. Така звездичката означава ’каквото и да било име на файл’, а трите поредни въпросителни значат ’поредица от три произволни символа за разширението’. Е, ако си в DOS/Windows, използвай командата dir:
> dir *.???
Така
$ ls my_*.*s
ще изведе списък на всички файлове, чиито имена започват с my_, а разширенията им завършват на s, например .ps, .bas, .pas. И така нататък.
Изрази с обобщаващи символи очевидно представляват шаблон за търсене. На английски този шаблон понякога го наричат glob, по всяка вероятност съкращение от global expression.
Както обикновено, в терминала на линукс може да правите повече: в квадратни скоби може да зададете списък от символи, които да стоят в дадена позиция, например:
$ ls *.*[tsf]
ще изведе списък на всички файлове, чиито разширения завършват на f, на s или на t.
Вместо да изброяваш всички символи, може да зададеш интервал, например:
$ ls *[0-9]*
ще ти покаже всички файлове в чиито имена или разширения има цифра. За да използваш интервал, все пак се налага да имаш някаква представа как са наредени символите в кодовата таблица.
* * *
Разучи шаблоните с обобщаващи символи. Пробвай да ги приложиш и във файловия менажер за търсене на файлове или за маркирането им. Ще разучиш работата с обобщаващите символи за не повече от 5–10 минути, а ще ги ползваш цял живот.
Само да предупредя — DOS/Windows не прави разлика между главни и малки букви, докато операционните системи, произхождащи от UNIX, правят. Така шаблонът:
> dir *.doc
ще хване и MyText.DOC, и your_text.doc, докато със същия шаблон:
$ ls *.doc
линукс или Mac OS X ще хване само your_text.doc.
Като посвикнеш да работиш с обобщаващите символи, ще ти се прииска да правиш още неща. Ще ти посоча как: чрез регулярните изрази (виж в раздела cream в режим „expert“, 23. Пак търсене и заместване — регулярни изрази — там аз обяснявам как се работи с регулярните изрази в cream, ама по същия начин е в почти всички програми на GNU/Linux).
В линукс това е лесно — всичко ти е под ръка. В Windows ще трябва да добавиш малко софтуер (свободен, разбира се) и да си поиграеш малко с настройките. Виж разясненията ми за пакета cygwin в 27. За Windows и го инсталирай. След това ще имаш достъп до програми като find, sed и още много други, които могат да работят с регулярни изрази.