Как я могу получить последний номер строки уникальных команд, когда 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 ' поэтому я мог бы добавить любое решение для этого.

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

  • Проверьте, был ли диск с нулевым значением с xxd и uniq?
  • Считайте уникальные строки только для заданного шаблона
  • Отфильтруйте повторяющиеся строки хвоста -f
  • Управление дублированными строками в файлах
  • сортировать и uniq в awk
  • Сохранение строк повторяется определенное количество раз
  • Как постоянно контролировать количество вхождений, проходящих через трубу
  • линии с уникальной контрольной суммой
  • 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

    Можно ли загружать чрезвычайно большие файлы разумно или по частям через SSH от Linux до Windows?

    ACL назвал групповые разрешения не переопределением прав доступа к файлам. Зачем?

    Редактирование столбцов с помощью awk или sed. как напечатать следующий шаблон?

    найти команду для новейших 500 файлов в дереве каталогов, а также быть совместимым с POSIX

    Зачем нам нужно два дескриптора файла при создании неназванного канала?

    Является ли команда whois безопасной для конфиденциальности?

    Переименование пакетного файла: лучше, чем случайный идентификатор, чтобы предотвратить удаление файлов с повторяющимися именами файлов?

    Отправка команды на экран и syslog

    Как оценивать оперативную память с помощью Linux Distro?

    как запустить службу systemd до начала работы сети?

    Файл не отображается с помощью vi, но отображается с помощью команды ls -l CD *

    Может ли определяемое пользователем свойство «destroy-after» установить на снимке ZFS?

    Создание задачи Cron для уничтожения остановленных / неудачных прогонов в системе

    Откат всех пакетов apt-get до максимума, доступных под фактическим sources.list

    Есть ли разница между read, head -1 и sed 1q?

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