$ awk '/[$]"[[:space:]]*$/{print;next} {printf "%s",$0}' file
"Field1"|"Field2"|"Field3"|"ufghjkrtyrtyfgh$"
"Field1"|"Field2continue on line 2continue on line 3"|"Field3"|"ufghjkrtyrtyfgh$"
"Field1"|"Field2"|"Field3"|"ufghjkrtyrtyfgh$"
Como funciona
-
/[$]"[[:space:]]*$/{print;next}
Para qualquer linha que termine com
$
seguido por"
, seguido opcionalmente por espaço em branco, isso (1) imprime a linha e (2) ignora os comandos restantes e instrui o awk a recomeçar nonext
de linha.Em expressões regulares do awk,
$
significa o fim da linha. Se queremos combinar um sinal de dólar real, devemos escapar de alguma forma. A maneira mais confiável de escapar é colocar entre colchetes:[$]
. Na regex acima,[$]
é seguido pelo aspas duplas"
e seguido por[[:space:]]*
. A classe de caractere[[:space:]]
corresponde a qualquer caractere de espaço em branco e o*
significa que devemos corresponder a zero ou mais deles. Isso é seguido pelo$
sem escape, que corresponde ao final da linha. -
printf "%s",$0
Para qualquer outra linha, isso diz ao awk para imprimir a linha sem um caractere de nova linha.