Получение линий между шаблонами 1 и шаблонами 2, которые могут повторяться несколько раз.

Нет, это неправда.

Если $HISTFILEявляется именем файла, то история сеанса будет храниться в этом файле. Это объясняется в руководстве. Количество команд, запоминаемых в истории оболочки, ограничено значением $HISTSIZE.

Я считаю, что история сбрасывается в файл после выполнения каждой команды, в отличие от bash, который сбрасывает историю в файл по завершении сеанса оболочки. Это может зависеть от того, какую реализацию kshвы используете.

Установите HISTFILEна имя файла в вашем ~/.profileфайле (, который читается оболочками входа в систему ), или в файле, на который указывает $ENV(, который читается интерактивными оболочками и имеет значение по умолчанию. из $HOME/.kshrcвksh93). $HISTSIZEпо умолчанию 500 или 512 или около того, в зависимости от используемой вами реализации ksh. Ни одну из этих переменных не нужно экспортировать. Файл истории не обязательно должен существовать перед этим.


В комментариях вы упомянули, что некоторые клавиши перемещения Emacs и редактирования в командной строке не работают. Это потому, что оболочка не находится в режиме редактирования Emacs. Либо установите для переменнойEDITOR(илиVISUAL)значение emacs, либо используйте set -o emacs, чтобы включить режим редактирования командной строки Emacs. Это также объясняется в руководстве. Эти переменные также не нужно экспортировать, если только вы не хотите, чтобы их использовали другие программы, кроме оболочки.


Резюме:

В вашем $HOME/.profileфайле:

export ENV="$HOME/.kshrc"

В вашем $HOME/.kshrcфайле:

HISTFILE="$HOME/.ksh_history"
HISTSIZE=5000

export VISUAL="emacs"
export EDITOR="$VISUAL"
set -o emacs

Это было тщательно протестировано на OpenBSD как с ksh93, так и с pdksh(, то есть kshна OpenBSD ). Я не использую mksh, но поскольку это производная от pdksh, я думаю, что это будет работать и с этой оболочкой.

Обратите внимание , что pdksh,ksh93bash)не могут совместно использовать файл истории , так как они имеют разные форматы истории.

Обычно это не проблема, если у вас есть отдельные файлы инициализации для bashи ksh, например. .bash_profileи .bashrcдля bashи .profileи .kshrcдляkshexport ENV="$HOME/.kshrc"в .profile). Вы можете дополнительно различать различные kshреализации, взглянув на$KSH_VERSION(обычно ).

0
16.04.2019, 17:54
1 ответ

Если это должно быть awk, просто сделайте:

awk -- '/AAA/,/BBB/{print}'

Но кажется, что sed идеально подойдет и для вашего случая. Итак, аналогично просто делаем:

sed -ne '/AAA/,/BBB/p'

В обеих командах используйте запятую, чтобы указать, что вы хотите рассмотреть все строки, начиная с (и включая )строку, соответствующую первому шаблону, до (и включая )строку, соответствующую первому шаблону. второй узор.

0
28.01.2020, 03:49

Теги

Похожие вопросы