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

75

В Linux я могу извлечь строку из файла, используя grep mySearchString myFile.txt. Как я могу получить только уникальный результат?

hap497
источник

Ответы:

125

Вы можете добиться этого с помощью sortи uniqутилит.

пример:

[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest"
контрольная работа
контрольная работа
контрольная работа
еще один тест
контрольная работа
[john @ awesome ~] $ echo -e "test \ ntest \ ntest \ nanother test \ ntest" | сортировать | уник
еще один тест
контрольная работа

в зависимости от данных вы можете использовать некоторые из коммутаторов.

Джон Т
источник
9
@John T - я бы рекомендовал использовать sortраньше, uniqесли данные не упорядочены. В противном случае uniqне будет работать полностью.
Студер
Теперь я могу поднять голос! Вы также помогли мне написать другие сценарии здесь;)
Studer
42
Используйте sort -uвместо sort | uniq. Это экономит процесс, уменьшает общий объем операций ввода-вывода и уменьшает общее количество сравнений, которые необходимо выполнить.
Крис Джонсен
@ChrisJohnsen Вы должны сделать этот комментарий ответом, так как это лучшее решение, чем текущий ответ
Нико Ван Белль
1

Вы можете использовать:

grep -rohP "(mySearchString)" . | sort -u

-r: рекурсивный

-o: печатать только соответствующую часть текста

-h: не печатать имена файлов

-P: регулярное выражение в стиле Perl (вы можете использовать -E вместо этого в зависимости от вашего случая)

sort -uлучше, чем sort | uniq, как указал @Chris Johnsen.

Пато
источник