Используя bash, я сохраняю свою историю с отметкой времени.
Как распечатать историю без метки времени?
alias h=history
alias g=grep -i
Чтобы найти строки, которые я использовал для heroku, я набираю:
> h | g heroku
Я хотел бы уникальные результаты без отметки времени, естественно.
Этот вопрос несколько связан с: Как избежать повторяющихся записей в .bash_history
Однако иногда я хочу увидеть дубликат в истории, чтобы увидеть контекст, в котором была команда бежать.
Просто, история | sed 's /. [] *. [0-9] *. [] * //' | uniq | grep -i "heroku"
sed
удалит любые [пробелы] [числа] [пробелы] в начале каждой строки
для оптимизации make it
history | grep -i "героку" | sed 's /. [] *. [0-9] *. [] * //' | uniq
Добавление в ответ @devav2
Очистить/удалить переменную окружения временнóй метки истории
HISTTIMEFORMAT="";
Экспорт следующей команды,
экспорт HISTCONTROL=gnoredups
--> Это проигнорирует дубликаты, которые выполняются последовательно
Временная метка может быть подавлена (или изменена) для каждого пользователя. основа команды:
Если переменная HISTTIMEFORMAT установлена, а не null, используется ее значение в виде строки формата для strftime (3), чтобы распечатать связанную отметку времени с каждой отображаемой записью в истории. В противном случае отметки времени не печатаются.
Остается только номера строк, которые нельзя подавить, но которые дополнены до фиксированной ширины (для номеров строк <100 000):
printf("%5d%c %s%s\n", line_number, modified ? '*' : ' ', timestamp, line);
Таким образом, чтобы удалить префикс из каждой строки, нам нужно вырезать первые 7 символов (5 цифр, 1 символ маркера и 1 пробел), например:
$ HISTTIMEFORMAT= history 10 | cut -c8-
Это можно легко добавить к псевдониму:
$ alias h='HISTTIMEFORMAT= history | cut -c8-'
Затем вызывается, например:
$ h | grep whatever
$ h | head -n 10