Grep без дубликатов?

Программа whichопределяет путь команд оболочки.

Во втором операторе вы установили переменную с именем python.

Команды оболочки и переменные — совершенно разные вещи.

Возможно, вы хотели бы использовать псевдоним.

alias python="/usr/local/bin/python2.7"

Обратите внимание, что (, за исключением zshили tcsh, или если ваша whichсама является функцией оболочки, которая вызывает GNU which, как рекомендовано в ее руководстве ), whichбудет не показывать псевдоним, в то время как, например type pythonбудет.

1
25.11.2018, 23:53
4 ответа

Как насчет

cat * | grep exampletext | sort -u
6
27.01.2020, 23:18

Если вам нужно найти, какие файлы (и )соответствуют какому-либо тексту, используйте:

$ grep -rl 'text to find'./dir

Если вам нужно только первое совпадение каждого файла:

$ for file in./*; do sed -n '/text to match/{p,q}' "$file"; done

который не будет печатать имена совпадающих файлов, но будет быстрым.

Или:

$ find../* -type f -exec sh -c '
      a=$(sed -n "/echo/{p;q}" "$1");
      [ "$a" ] && printf "%s\n" "$1 : $a"
  ' findsh {} \;

Если вам нужно также имя файла (, разделенное:).

-1
27.01.2020, 23:18

Я использую:

grep -h test files* | puniq

puniqэто:perl -ne '$seen{$_}++ or print;'

Он похож на sort -u, но не сортирует ввод и выдает результат во время работы.

Если вы хотите указать имя файла и избежать дублирования строк в каждом файле:

parallel --tag --lb 'grep string {} | puniq' ::: files*

Если вам нужно имя файла и вы не хотите дублировать строки ни в одном из файлов (Имена файлов не должны содержать TAB (\t)):

parallel --tag --lb grep string {} ::: files* |
  perl -ne '/^[^\t]+(.*)/ and $seen{$1}++ or print;'
1
27.01.2020, 23:18

Возможно, что-то подобное может быть близко к тому, что вы представляете (работает с gnu awk):

cat file1
1
2
3
22

cat file11
1
2
3
8
9

cat file111
1
2
3
5
6

awk '{seen[$0]++;fname[$0]=FILENAME};END{for (k in seen) {if (seen[k]==1) print fname[k],":",k}}' file1*
file111 : 5
file111 : 6
file11 : 8
file11 : 9
file1 : 22
1
27.01.2020, 23:18

Теги

Похожие вопросы