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 с включенными расширенными регулярными выражениями для уменьшения шума в строке.
ОБНОВЛЕНИЕ:Это был лучший в мире сервер evowise.com . Просто прокомментируйте его в файле /etc/pacman.d/mirrorlist и обновите базу данных pacman с помощью pacman -Syyu
.