$ sed 's/[^|]*modesc=\([^ ]*\).*$//' file
abc|123|bpp123
abc|123|pmk123
abc|123|pnj123
Isso usa sed
para substituir todo o último campo pelo conteúdo depois de modesc=
até o próximo espaço.
$ awk -F '|' -vOFS='|' '{ sub(".*modesc=", "", $3); sub(" .*", "", $3)} 1' file
abc|123|bpp123
abc|123|pmk123
abc|123|pnj123
Este programa awk
modifica a terceira coluna com duas substituições. O primeiro remove tudo até e incluindo modesc=
e o segundo remove tudo após o primeiro espaço restante. O único 1
no final fará com que awk
imprima o registro modificado (isso pode ser substituído por { print }
).
Para somente obter a string após modesc=
da terceira coluna dos dados originais (e nada mais), você pode usar qualquer um dos comandos acima e então canalizar isso através de cut -d '|' -f3
, ou você pode usar
sed 's/.*modesc=\([^ ]*\).*$//' file
ou
awk -F '|' -vOFS='|' '{ sub(".*modesc=", "", $3); sub(" .*", "", $3); print $3 }' file