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


75

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

Ответы:


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.