Команда bash history
очень крутая. Я понимаю, почему он показывает номера строк, но есть ли способ вызвать команду истории и подавить номера строк?
Дело здесь в том, чтобы использовать команду истории, поэтому, пожалуйста, не отвечайте cat ~/.bash_history
Текущий выход:
529 man history
530 ls
531 ll
532 clear
533 cd ~
534 history
Исторический графический источник.
Желаемый результат:
man history
ls
ll
clear
cd ~
history
Исторический графический источник.
Спасибо всем за отличные решения. Paul - самый простой и подойдет мне, потому что размер моей истории bash установлен на 2000.
Я также хотел поделиться классной статьей, которую нашел сегодня утром. У него есть несколько хороших опций, которые я сейчас использую, например, удаление повторяющихся записей из истории bash и обеспечение того, чтобы несколько сеансов bash не перезаписывали файл истории: http://blog.macromates.com/2008/working-with -История-в-Баш /
cat ~/.bash_history
это исключено?Ответы:
Попробуй это:
источник
history
команды по конвейеру вместо чтения файла?man cut
, Он удаляет первые 7 символов каждой строки выводаhistory
команды. Он должен иметь только проблемы , если их число превышает 99999, что - то я никогда не видел (и я использую снаряды много ). Но если вас это беспокоит:history | sed 's/^ *[0-9]* *//'
cut
дополняет номера строк пробелами, и теперь синтаксис становится более понятным :) Спасибо @Keith Thompson за ваше решение, которое будет работать для> 100k историй.awk
может помочь:Этот ответ может потерпеть неудачу, если у вас долгая история.
источник
substr
это намного проще, я использовалhistory | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'
для своего !!Я прекрасно понимаю, что этот вопрос касается bash, и многие люди предпочли бы не переключаться на zsh (подсказки против ...)
Однако, если вы были готовы перейти на zsh, тогда zsh поддерживает это изначально (а также другие параметры форматирования истории).
(См. Https://serverfault.com/questions/114988/removing-history-or-line-numbers-from-zsh-history-file )
источник
fc
этоbash
тоже встроенный. Единственная разница в том, что первая строка1
, так и будетfc -ln 1
Я опаздываю с этим, но более короткий способ - добавить следующее в ваш
~/.bashrc
или~/.profile
файл:HISTTIMEFORMAT="$(echo -e '\r\e[K')"
Из bash
manpage
:Используя эту возможность, хитрый прием состоит в том, чтобы заставить переменную «печатать» символ возврата каретки (
\r
) и очищать строку (код ANSIK
) вместо фактической отметки времени.источник
HISTTIMEFORMAT=$'\r\e[K'
HISTTIMEFORMAT=$'\r\e[K' history
В качестве альтернативы вы можете использовать sed:
Используя псевдоним, вы можете установить его как стандарт (вставьте его в свой bash_profile):
источник
\+
в базовом регулярном выражении не соответствует стандарту POSIX. Используйте,\{1,\}
если выsed
не поддерживаете нестандартное\+
расширение.Хотя сокращение с
-c
опцией работает для большинства практических целей, я думаю, что передача истории в awk была бы лучшим решением. Например:ИЛИ
Оба этих решения делают то же самое. Вывод истории передается в awk. Затем Awk вычеркивает первый столбец, который соответствует числам в выходных данных команды history. Здесь awk более удобен, потому что вам не нужно беспокоиться о количестве символов в числовой части вывода.
print $0
эквивалентноprint
, поскольку по умолчанию печатается все, что появляется в строке. Набор текстаprint $0
более явный, но какой из них вы выберете, зависит от вас. Поведениеprint $0
and simpleprint
при использовании с awk более очевидно, если вы использовали awk для печати файла (cat
было бы быстрее печатать вместо awk, но это для иллюстрации).[Ex] Использование awk для отображения содержимого файла с $ 0
[Ex] Использование awk для отображения содержимого файла без явного $ 0
[Пример] Использование awk, когда строка истории занимает несколько строк
источник
Из вывода
history --help
:Он записывает текущую историю в указанный файл -
/dev/stdout
в данном случае.источник
history
команда не имеет возможности подавить номера строк. Вам придется комбинировать несколько команд, как все предлагают:Пример :
источник
sed
равно собираетесь прогнать его , тогда начальный разрез будет лишним - просто добавьте его вместо этого в выражение.Вы можете попробовать https://github.com/dvorka/hstr, который позволяет фильтровать историю Bash в стиле «подсказки» с (необязательным) упорядочиванием на основе метрик, т.е. это намного эффективнее и быстрее как в прямом, так и в обратном направлении:
Его можно легко привязать к Ctrl-rи / илиCtrl-s
источник
Вы можете использовать команду
cut
для ее решения:Вырежьте поля из STDIN или файлов.
Вырежьте первые шестнадцать символов каждой строки STDIN:
cut -c 1-16
Вырежьте первые шестнадцать символов каждой строки данных файлов:
cut -c 1-16 file
Вырежьте все от 3-го символа до конца каждой строки:
cut -c3-
Вырежьте пятое поле в каждой строке, используя двоеточие в качестве разделителя полей (разделителем по умолчанию является табуляция):
cut -d':' -f5
Вырежьте 2-е и 10-е поля каждой строки, используя точку с запятой в качестве разделителя:
cut -d';' -f2,10
Вырежьте поля с 3 по 7 в каждой строке, используя пробел в качестве разделителя:
cut -d' ' -f3-7
источник
Я знаю, что опаздываю на вечеринку, но это намного легче запомнить:
источник