Ярлыки Emacs в режиме термина

Вместо использования date | awk ..., можно использовать спецификатор формата с командой даты для формата, который Вы хотите. Согласно date(1) страница справочника, %b сокращенное имя месяца, и %e день месяца, дополненное пространство, то же как %_d.

Следующая команда даты должна дать Вам строку в форме, которую Вы хотите:

date "+%b %e"

Можно также поместить другие символы в спецификатор формата, поэтому если Вы используете:

date "+^%b %e"

Вы получите grep шаблон, который соответствует дате только в начале строки. Это предотвратило бы любые ложные соответствия, где существует дата в части сообщения журнала.

Как указано Steven D, можно также сделать это с единственным вызовом grep:

auth()
{
    grep -E "$(date '+^%b %e')"'.*(BREAK-IN|Invalid|user|Failed|refused|su|Illegal)' /var/log/auth.log
}

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

Исходный ответ имел date строка формата в двойных кавычках, которая была неправильной согласно моему выше правил. Я теперь изменил это. Редактирование поместило строку grep в двойные кавычки. Я отложил его в одинарные кавычки, потому что существует так часто перекрытие между метасимволами оболочки и grep метасимволами регулярного выражения (RE), что Вы почти всегда хотите к одинарной кавычке REs к grep. Текущая строка, возможно, не нуждается в одинарных кавычках, но если эта функция оболочки развивается со временем, она может порвать с будущими изменениями.

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

Я протестировал это как функцию оболочки, с помощью предложения Gilles для futzing дата, и это "работает на меня".

3
28.04.2012, 02:16
2 ответа

C-c CHAR Это эквивалентно C-x CHAR в нормальном Emacs. Например, C-c o вызывает глобальную привязку C-x o, который обычно является other-window.

(Информационный файл Emacs, "Режим Term")

7
27.01.2020, 21:11
  • 1
    Perhabs мой вопрос не был ясен. В каждом окне я могу переключить на antoher использование короткого пути C-x o. В окне терминала ничего не происходит. Я должен использовать мышь для переключения на другое окно. Это просто не работает в окне терминала! Так, мой вопрос, там другой короткий путь для переключения из окна терминала в Emacs другому? –  math 27.04.2012, 13:31
  • 2
    Если я использую C-c CHAR, в моем случае, C-c o ничего не происходит в Emacs. –  math 27.04.2012, 13:32
  • 3
    Вы использующий нормальный term-mode? C-c o работы для меня, после M-x term RET RET (который запрашивает /bin/bash в моем случае, но это не должно влиять на вещи). Кроме того, что версия Emacs? (Мой 23.4.1) –  geekosaur 27.04.2012, 13:35
  • 4
    я использую 23.4.1, также. Да, я сделал точно то же M-x term RET RET. Странный.... Я просто отмечаю, что не могу уничтожить окно рабочий терминал с C-x k. Кажется, что в таком окне терминала я не могу использовать короткие пути. –  math 27.04.2012, 14:20
  • 5
    Стандарт emacs команды не доступны в окнах терминала, потому что часто необходимо мочь отправить ключи непосредственно к тому, что работает в окне; вот почему C-c обычно восстановление. Я не знаю, почему это не работает на Вас. –  geekosaur 27.04.2012, 14:31

C -c C -j переключается в построчный режим, когда вам нужно сделать Emacs -y что-то с буфером (Term :line run )появляется в строке состояния

C -c C -k переключается обратно в режим char, когда вам нужно, чтобы он снова работал как терминал (Term :char run )отображается в строке состояния

1
27.01.2020, 21:11

Теги

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