Все очень просто.
/etc/ssl/openssl.cnf
имел незначительную проблему с конфигурацией.
По-видимому, openssl обновился, требуя дополнительных полей, но, поскольку диспетчер пакетов учитывает личные конфигурации, он сохранил другой файл конфигурации как .backup
рядом с используемой конфигурацией.
Моя конфигурация заменена на более новую по умолчанию, и все работает.
Опция -f
ожидает имя файла. Как вы это пишете, имя файла — это текст, следующий за f
, в -vfw
, другими словами, это w
.
Вы должны поместить опцию, которая принимает аргумент в конце (, за исключением tar
, которая использует странный разбор опции ).
Любой из них должен работать.
grep -v -w -f input.txt data.txt > output.txt
grep -vwf input.txt data.txt > output.txt
grep -vwfinput.txt data.txt > output.txt
Обратите внимание, :точное сообщение об ошибке, которое вы всегда должны цитировать полностью, когда задаете вопрос, упоминает имя w
.
grep:w
:Нет такого файла или каталога
Если вы хотите ограничить сравнение только вторым полем с разделителями, вы можете использовать awk вместо grep:
$ awk -F'|' 'NR==FNR {a[$1]++; next} !($2 in a)' input.txt data.txt > output.txt
$ cat output.txt
ESP|041336|46566|NY|CA
ESP|041340|46566|NY|CA
ESP|041341|46566|NY|CA
sed -nE '
/\|/!{H;1h;d;}
G
/^[^|]+\|([^|]+)\|.*\n\1(\n|$)/!P
' input.txt data.txt
Результат:
ESP|041336|46566|NY|CA
ESP|041340|46566|NY|CA
ESP|041341|46566|NY|CA
Комментарии:
Храните стропы input.txt
в трюме, поскольку в нем нет трубы. /\|/!
Эти строки разделены символом новой строки в пробеле.
Для строк данных мы добавляем область хранения к пространству шаблонов, а затем пытаемся найти второе поле с разделителями вертикальной чертой. Если его не найти, напечатайте часть перед первой новой строкой в пространстве шаблонов P
.
Регулярное выражение, /^[^|]+\|([^|]+)\|.*\n\1(\n|$)/
соответствует пространству шаблонов если второе|
-поле с разделителем в строке данных (изdata.txt
)соответствует одной из входных строк, которые находятся в конце пространства шаблона, разделенного символами новой строки. В конце есть условие ИЛИ, чтобы позаботиться о сценарии, когда совпадающий шаблон был последней строкой файла input.txt
.
Предполагается версия GNU sed с включенными расширенными регулярными выражениями для уменьшения шума в строке.