Это может работать для вас (GNU sed):
sed -rn '2s/^(([^|]*)\|?){3}.*/\2/p' file
Отключите автоматическую печать, установив параметр -n
, включите более легкое объявление регулярных выражений с помощью параметра -r
.Используйте сопоставление с образцом и обратные ссылки, чтобы заменить всю вторую строку третьим полем той же строки и вывести результат.
Адрес команды подстановки ограничен только второй строкой.
Регулярное выражение группирует символы без разделителей, за которыми следует разделитель определенное количество раз.Во второй группе сохраняются только символы без разделителей для определенного номера.Каждая группировка заменяется следующей, и поэтому сообщается о последней группировке, .*
потребляет остаток строки, и поэтому печатается только третье поле (содержимое второй группы).
Примечание: разделитель будетприсутствовать после последнего столбца и поэтому необязательно \|?