Короче, я раздобыл великую и ужасную книженцию
UNIX Power Tools и как выяснилось, там не 1700 страниц, а меньше - 1100 штоле. Прочитал 28 главу - Saving Time On The Command Line или типа того. Много чего я уже знал, некоторые вещи доступны в других оболочках (всяких zsh), но пару полезных вещей я вам расскажу.
Первая
и вторая фичиэто охуенно полезная (и недооцененная) фича - фигурные скобки. Покажу в примерах, а вы уж там думайте сами. Часто встречаются команды навроде
cp (или mv) /usr/bla-bla-bla/boom-boom/fileA /usr/bla-bla-bla/boom-boom/fileA.old
вместо этого можно записать:
cp /usr/bla-bla-bla/boom-boom/fileA{,.old}
Или есть у вас например куча серверов типа
srv1.node1.prod
srv1.node2.prod
srv1.node1.test
srv1.node2.test
srv2.node1.test
и т.д.
Чтобы все их не перечислять, можно записать srv{1,2}.node{1,2}.{prod,test} и всё это развернётся в неебический список из восьми серверов!
Вторая фича - допустим у вас есть файлы fileA fileB fileC - начинаются одинаково, заканчиваются по-разному. Вот, если набрать, скажем ls file и нажать META+{, оболочка допишет следующее:
ls file{A,B,C}
Проблема в том, что я так и не понял, какая же клавиша у меня META (( Это где-то в недрах оболочки прописывается, а то и Xorg, Методом научного тыка у меня получилось, что раз я РУС-ЛАТ переключаю Ctrl+Shift, то жмёшь Ctrl+Shift+{ и готово. Но оно как-то через раз срабатывает, так что хз. Но хер с ним, это не так часто нужно, вот первая фича - это да!
File globbing vs RegexpИ ещё, раз уж начал писать про это поделюсь очередным откровением. Меня на тестах засрали, и я-таки осознал, что file globbing и regexp это типа совершенно разные вещи. Хотя и похожи. Но совершенно разные. Судите сами - globbing используется только в оболочке, а regexp во всяких grep, sed и прочих подобных штуках.
file globbing
* - всё, что угодно, включая пусто
? - один любой символ
[AaBb] или диапазоны [A-Za-Z0-9]
и всё.
В regexp
* - предыдущий символ встречается 0 или более раз (то же самое, короче, токо символ нужен)
? - предыдущий символ встречается 0 или 1 раз (не то же самое)
+ - предыдущий символ встречается 1 или более раз
{n} - предыдущий символ встречается точно n раз
{n,m} - предыдущий символ встречается как минимум n, но не более m раз
. (точка) любой символ, кроме перевода строки
^ - начало строки
$ - конец строки
[AaBb] или диапазоны [A-Za-Z0-9] то же самое, но можно ещё использовать всякие хрени типа [:alnum:][:alpha:][:digit:][:xdigit:][:space:] и прочее
[^AaBb] - инверсия. Любые другие символы, кроме этих.
\< \> границы слова
() - группировка или чо-то типа того
| - операция ИЛИ
короче, тут всякие звёздочки ставятся после некоторого символа. Точка это и есть "некоторый символ". Токо щас допёр, а то всё думал, чо они эту точку везде пихают, а я не пихал, и у меня регекспы нихера не работали толком никогда. Ну всё, держитесь теперь все!
З.Ы. Теперь-то вы поняли, что такую херню, как регекспы, только норкоманы могли придумать? Как, впрочем, и весь UNIX. У меня уже мозги закипели ((