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


75

У Linux я можу зірвати рядок із файлу, використовуючи grep mySearchString myFile.txt. Як я можу отримати лише унікальний результат?

Відповіді:


125

Ви можете досягти цього за допомогою sortі uniqутиліт.

приклад:

[john @ awesome ~] $ echo -e "тест \ ntest \ ntest \ інший тест \ ntest"
тест
тест
тест
чергове випробування
тест
[john @ awesome ~] $ echo -e "тест \ ntest \ ntest \ інший тест \ ntest" | сортувати | uniq
чергове випробування
тест

залежно від даних, які ви можете також використовувати, деякі комутатори.


9
@John T - Я б рекомендував використовувати sortраніше, uniqякщо дані не будуть впорядковані. Інакше uniqне вийде повністю.
Студент

t тепер я можу подати пропозицію! Ви також допомогли мені написати інші сценарії тут;)
Студент,

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.