Я использую zsh с плагинами oh-my-zsh для своей оболочки и со временем у меня накопилась довольно большая коллекция маленьких хитростей. Вот несколько.

CDPATH

Знаете ли вы, что вам не нужно запоминать все пути в вашей оболочке, хорошо, где был файл, который я редактировал? Вы можете сделать некоторые значения по умолчанию, чтобы при запуске cd он сначала просматривал эти пути, если только вы не укажете полный путь.

Вот как выглядит мой

CDPATH=/Users/pgautam/work:/Users/pgautam/go/src

Это означает, что я могу сделать следующее

go get github.com/GoogleCloudPlatform/golang-samples
cd !$

Последний просто расширяет последний аргумент, поэтому я клонирую этот каталог и бум! Я там. Это экономит ввод ~/go/src/<whole path. Одна из вещей, которые я заметил, это то, что некоторые скрипты bash дают сбой, если установлен CDPATH (или если каталоги конфликтуют), поэтому внутри этих скриптов я иногда добавляю unset CDPATH, чтобы они запускались.

Перемещайтесь с помощью z

Что, если бы вам вообще ничего не нужно было запоминать, а только имя последнего каталога? Ну ты можешь. Я сопоставил z со скриптом z.sh, который хранит статистический список того, что вы ищете, и сразу переходите к нему. Скрипт установки здесь

https://github.com/rupa/z

z foo         cd to most frecent dir matching foo
z foo bar     cd to most frecent dir matching foo, then bar

z -r foo      cd to highest ranked dir matching foo

z -t foo      cd to most recently accessed dir matching foo

z -l foo      list all dirs matching foo (by frequency)

fzf для нечеткого сопоставления команд и создания быстрых инструментов

Я узнал об этом инструменте под названием fzf — для нечеткого поиска несколько лет назад, и я использовал его для запросов и иногда для создания некоторых интерактивных инструментов. Я думаю, что README на этой странице прекрасно раскрывает множество расширенных функций, но я покажу вам некоторые из них, которыми я регулярно пользуюсь.

Вы хотите найти и выбрать несколько файлов



Вы можете быстро выполнить команду, например

JSONS=$(find . -name '*.json' | fzf)

и получите все файлы, которые вы хотите, которые заканчиваются на .json, в переменную с именем $JSON с тем, что вам нужно выбрать. Это полезно, если вы хотите выбрать что-то нетривиальное несколько раз, но придумать какое-то правило не так-то просто и не стоит тратить время. Вы можете поставить -print0, если вы предоставляете другим командам или если ваши файлы содержат пробелы.

Подключение к Ctrl-R и Ctrl-T

Поэтому я использую Ctrl-R для просмотра моей истории. fzf спасает жизнь в поисках того, что я сделал несколько дней или недель назад. Ctrl-T сопоставляется с поиском fzf в каталоге. Чтобы не набирать find каждый раз, когда нужно что-то быстро найти. Это может раздражать, если вы находитесь в репозитории git, поэтому у меня есть следующее.

export FZF_DEFAULT_COMMAND=’
 (git ls-tree -r — name-only HEAD ||
 find . -path “*/\.*” -prune -o -type f -print -o -type l -print |
 sed s/^..//) 2> /dev/null’

Это просто ускоряет поиск, выполняя поиск только в дереве git.

Однострочники Perl

Да, я до сих пор иногда использую perl — я все еще нахожу его чертовски проще и переносимее, чем bash, а регулярное выражение более интуитивно понятно и мощно, чем Python. Однако я не пишу большие программы на Perl. Есть более обширный и полный список, составленный Питером Круминсом по адресу http://www.catonmat.net/blog/perl-one-liners-explained-part-one/, я почти исключительно использую вещи из части VII для регулярных выражений Perl. но еще проще, это то, что я использую для сопоставления вещей, не соответствующих grep. Допустим, у вас есть файл с электронными письмами, и вы хотите выбрать их все (допустим, они не очень сложные. Анализировать электронную почту с помощью регулярных выражений очень сложно).

perl -lne 'print $1 if /([a-z0–9]+([a-z0–9.]+[a-z0–9])?\@[a-z0–9.-]+)/' possible-emails.txt

Я обычно использую более продвинутые и хорошо проверенные механизмы для такого рода работы, но в крайнем случае такой вкладыш должен подойти. Попробуйте использовать эту запись для possible-emails.txt

aafafafaf   [email protected] afafa
asfasfafa [email protected] eeqweqw
adasda [email protected] ewewrwerw

Для получения более подробной информации по этому вопросу — ознакомьтесь с записью в блоге KSplice на ту же тему. https://blogs.oracle.com/ksplice/the-top-10-tricks-of-perl-one-liners

Я упоминаю об этом здесь — это то, что Perl, несмотря на то, что сейчас его сильно ненавидят разработчики, по-прежнему остается полезным инструментом в нужных местах.