Если я grep файл, содержащий следующее:
These are words
These are words
These are words
These are words
... для слова These
, это распечатает строку These are words
четыре раза.
Как я могу препятствовать тому, чтобы grep печатал повторяющиеся строки несколько раз? Иначе, как я могу управлять выводом grep для удаления дублирующихся строк?
Философия Unix состоит в том, чтобы иметь инструменты, которые делают одно и делают их хорошо. В этом случае grep
- это инструмент, который выделяет текст из файла. Чтобы выяснить, есть ли дубликаты, нужно отсортировать текст. Чтобы удалить дубликаты, используется опция -u
для sort
. Таким образом:
grep These filename | sort -u
sort
имеет много вариантов: см. man sort
. Если вы хотите сосчитать дубликаты или использовать более сложную схему для определения того, что является или не является дубликатом, направьте вывод сортировки в uniq
: grep These filename | sort | uniq
и см. man
uniq` для вариантов.
Используя grep
и дополнительный переключатель, если Вы ищете только единственную строку
grep -m1 'These' filename
<час> От man grep
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines. If the input is
standard input from a regular file, and NUM matching lines are
output, grep ensures that the standard input is positioned to
just after the last matching line before exiting, regardless
of the presence of trailing context lines. This enables a calling
process to resume a search. When grep stops after NUM matching
lines, it outputs any trailing context lines. When the -c or
--count option is also used, grep does not output a count greater
than NUM. When the -v or --invert-match option is also used, grep
stops after outputting NUM non-matching lines.
или используете awk
;)
awk '/These/ {print; exit}' foo