Как я могу получить последний номер строки уникальных команд, когда grepping мой файл истории?

Я полагаюсь на свой файл истории для предыдущих команд, особенно тех, которые длинны со многими параметрами. Как только я нахожу команду и ее номер строки ( nn ), я использую !nn для ее запуска. Я предпочитаю видеть полный вывод из поиска, а не делать обратный поиск в строке.

Для этого я просматриваю его с помощью history | grep some_text history | grep some_text

Однако я получаю много результатов из-за повторяющихся записей (отличающихся только номерами строк). По мере роста моей истории это ухудшается с течением времени.

Как я мог получить список только уникальных команд, которые я мог бы использовать с помощью ! вызвать команду оператора?

Я пробовал историю | uniq | grep some_text, но это не работает из-за номеров строк.

Я могу сделать history | cut -b8- | uniq history | cut -b8- | uniq history | cut -b8- | uniq и это показывает только команды.
Однако, когда я добавляю sort я получаю $ history | sort sort: string comparison failed: Illegal byte sequence sort: Set LC_ALL='C' to work around the problem. sort: The strings compared were $ history | sort sort: string comparison failed: Illegal byte sequence sort: Set LC_ALL='C' to work around the problem. sort: The strings compared were $ history | sort sort: string comparison failed: Illegal byte sequence sort: Set LC_ALL='C' to work around the problem. sort: The strings compared were Сравнение $ history | sort sort: string comparison failed: Illegal byte sequence sort: Set LC_ALL='C' to work around the problem. sort: The strings compared were 5359 \ 253 'и 5360 x'.
Также номера строк исчезли, что я действительно хотел бы для команды !line-number

В идеале я бы хотел, чтобы это происходило каждый раз, когда я делаю свою history | grep history | grep – что я делаю так, у меня есть псевдоним hg='history | grep ' hg='history | grep ' поэтому я мог бы добавить любое решение для этого.

Менее идеальным, но все же интересным будет возможность запуска специальной программы, которая фактически сделает записи в файле истории уникальными (опять же, имея дело с номерами строк), так что только самая последняя команда истории любой данной команды сохранена). предположительно, удалив другие строки. Но удалили ли строки в файле истории таким образом испортить способ использования файла системой?

  • Мне нужны данные из файла csv, которого нет во втором файле csv
  • uniq и bash для цикла, не записывающего в stdout перед закрытием stdin (для системы уведомлений посетителей в одной строке)
  • бездисковый поиск дубликатов имен файлов
  • Групповая команда uniq?
  • В чем разница между «sort -u» и «sort | уник»?
  • Комбинация uniq и agrep?
  • Почему утилита uniq дает мне неожиданные результаты?
  • Как получить только уникальные результаты без сортировки данных?
  • 3 Solutions collect form web for “Как я могу получить последний номер строки уникальных команд, когда grepping мой файл истории?”

    Ты можешь сказать:

     history | awk '{$1=""; sub("^ ", "", $0)}1' | sort -u 

    чтобы получить список уникальных записей в history .

    Однако вы также можете установить HISTCONTROL чтобы избежать дубликатов в history :

     HISTCONTROL=ignoredups:erasedups 

    Цитата из руководства :

    HISTCONTROL

    Обозначенный двоеточием список значений, определяющий, как команды сохраняются в списке истории. Если в список значений входит « ignorespace », строки, начинающиеся с символа пробела, не сохраняются в списке истории. Значение « ignoredups » заставляет строки, которые соответствуют предыдущей записи истории, не сохраняться. Значение « ignoreboth » является сокращением для « ignorespace » и « ignoredups ». Значение « erasedups » заставляет все предыдущие строки, соответствующие текущей строке, удаляться из списка истории до того, как эта строка будет сохранена. Любое значение, не указанное в приведенном выше списке, игнорируется. Если HISTCONTROL отключен или не содержит допустимого значения, все строки, считанные синтаксическим анализатором оболочки, сохраняются в списке хронологии с учетом значения HISTIGNORE . Вторая и последующая строки многострочной составной команды не тестируются и добавляются в историю независимо от значения HISTCONTROL .

    Вы можете проанализировать файл .bash_history , вместо использования команды history . Вот пример в awk :

     awk '!x[$0]++' .bash_history | nl 

    Но, как и ответ @ devnull, вы должны использовать HISTCONTROL чтобы избежать дублирования команды, а также команды, которые начинаются с spaces :

     HISTCONTROL=ignoreboth 

    в моей системе uniq имеет возможность пропускать поля.

     history | uniq -f 1 

    дает мне уникальный список моей истории с номерами строк

    моя версия:

     uniq (GNU coreutils) 8.15 

    Однако это только опускает параллельные дубликаты, поэтому я бы действительно сортировал вывод истории, а затем uniq it:

     history | sort -k 2 | uniq -f 1 | sort -n 

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

    Interesting Posts

    Звук очень низкий (почти не слышимый) от первичной звуковой карты, Debian 8, импульсный звук

    Сделать окно терминала «un-hideable»

    Как создать привязку ключей для повторного поиска конфигурации оболочки без сохранения новой команды в истории?

    Разделенные разделы FreeBSD и Linux

    Каков длинный идентификатор, который Linux присваивает диску в / media /?

    «Использовать почту» из командной строки

    Miniupnp считает, что мой маршрутизатор не поддерживает UPnP

    Почему некоторые приложения оставляют события KeyRelease потребляемыми следующим ориентированным приложением / окном

    Обмен (обмен) двумя большими файлами в ограниченной среде

    Как я могу исправить конфликт раздела?

    Можем ли мы использовать два расширения фигурных скобок вместе?

    Как я могу условно передать подоболочку через «время»?

    Rsync пропускает зашифрованный (но установленный) домашний каталог

    Почему замораживание мыши в FreeBSD 9.1 Gnome или Fluxbox?

    Одна учетная запись перестала получать электронные письма – postfix / dovecot

    Linux и Unix - лучшая ОС в мире.