Трубопровод sed для grep не работает должным образом

У меня есть 2 файла:

$ cat file1 jim.smith john.doe bill.johnson alex.smith $ cat file2 "1/26/2017 8:02:01 PM",Valid customer,jim.smith,NY,1485457321 "1/30/2017 11:09:36 AM",New customer,tim.jones,CO,1485770976 "1/30/2017 11:14:03 AM",New customer,john.doe,CA,1485771243 "1/30/2017 11:13:53 AM",New customer,bill.smith,CA,1485771233 

Я хочу, чтобы из файла2 все имена, которые не существуют в файле1.
Не работает следующее:

 $ cut -d, -f 3 file2 | sed 's/"//g' | grep -v file1 jim.smith tim.jones john.doe bill.smith 

Почему в этом случае труба grep -v не работает?

4 Solutions collect form web for “Трубопровод sed для grep не работает должным образом”

Это фактически последний шаг в моем ответе на ваш предыдущий вопрос .

Ваше решение работает, если вы добавите -f перед file1 в grep :

 $ cut -d, -f3 file2 | grep -v -f file1 tim.jones bill.smith 

С -f grep будет выглядеть в file1 для шаблонов. Без него он просто будет использовать file1 как буквенный шаблон.

Вы также можете использовать -F так как иначе точка в шаблоне будет интерпретироваться как «любой символ». И пока вы на нем, поместите -x туда, чтобы grep выполнил матч по всей строке (будет полезно, если у вас есть joe.smith который не должен соответствовать joe.smiths ):

 $ cut -d, -f3 file2 | grep -v -F -x -f file1 

Это требует, очевидно, что в конце строк в file1 нет конечных пробелов (что, похоже, содержится в тексте вопроса).

Обратите внимание, что sed не нужен, так как выход cut не содержит никаких " . Также, если вам нужно было удалить все " , тогда tr -d '"' был бы лучшим инструментом.

Попробуй это. Нет sed . Требуется GNU diff и bash .

 diff --new-line-format="" --unchanged-line-format="" <(cut -f3 -d, file2|sort) <(sort file1) 

Получает результаты:

 bill.smith tim.jones 

Это должно работать:

 $ pattern=$(cut -d, -f 3 file2) $ grep -v -e "$pattern" file1 

В вашем примере grep пропускает свой шаблон. Кроме того, grep может читать либо файл, либо stdin (по каналу), а не оба. Если имя файла не указано, grep читает из stdin.

Кроме того, это может также работать:

 $ grep -v -f <(cut -d, -f3 file1) file2 

Извините, он не проверен.

Ответ с grep -f , вероятно, лучший, но немного стильная альтернатива:

 % cut -d, -f3 file2 >names2 % cat file1 file1 names2 | sort | uniq -u bill.smith tim.jones % 

Разумеется, это требует дополнительного временного файла (или развлечений и игр с файловыми дескрипторами), и я бы не захотел попробовать его с большими файлами.

Я упоминаю об этом только потому, что для задач, связанных с сопоставлением файлов, sort plus uniq является неожиданно универсальной и, возможно, недооцененной, парой инструментов. Для выполнения быстрых задач они могут обеспечить необходимый результат для результата.

  • sed и многострочная замена
  • sed Удалить строки, заканчивающиеся на %
  • Распечатайте все между двумя шаблонами, затем удалите первую и последнюю строку результирующего вывода
  • grep для строк, которые были найдены в предыдущем заявлении
  • sed на вставке OSX на определенной строке
  • Почему sed дает мне ошибку в отношении неиспользуемого `s '?
  • format String с помощью sed
  • импорт данных из текстового файла в сценарий bash
  • Расширение путей в переменных Bash в выражения sed
  • совпадение шаблонов и захват в unix
  • Печать только git commit sha и шаблон с помощью sed
  • Interesting Posts

    Объяснение источников Debian по умолчанию?

    Выбор файловой системы для рейдового рейда 16 ТБ

    Как запустить службу Systemd навсегда («Загрузка еще не завершена. Повторите попытку позже»).

    почему все сильно реагирует при передаче данных на USB-накопитель на 32 ГБ?

    change / proc / PID / environ после запуска процесса

    Альтернатива Makefile для тех, кто не хочет, чтобы вкладка отступала от всего содержимого под открытым небом

    Установка Docker на Ubuntu 15.04, невозможность обновления

    Можно ли постоянно устанавливать имя интерфейса в Raspbian?

    Как назначить имя группы группе без имени группы?

    В чем разница между форматом qcow2 и img?

    Открыть / прочитать исполняемый файл Unix

    Установка linux на USB без перезагрузки

    Как слить ключи или обработать ключи с тем же именем?

    Места в Bash, где сопоставление образцов выполняется с помощью регулярных выражений?

    Сценарий bash работает только с отладчиком

    Linux и Unix - лучшая ОС в мире.