Como envolver essa saída entre aspas?

1

Eu tenho o seguinte comando, que me dá 99% do que eu quero:

root@CA2UA5232QPZ:/# tail -3 newtag | awk '{print $1}'
v1.0.20170512.1
v1.0.20170712.1
v1.0.20170712.2
root@CA2UA5232QPZ:/#

Mas preciso ajustá-lo para que a saída fique assim:

'v1.0.20170512.1'
'v1.0.20170712.1'
'v1.0.20170712.2'
    
por user759790 09.08.2017 / 22:19

4 respostas

3

Há o escudo horrível citando o inferno desses

awk '{print "'"'"'" $1 "'"'"'"}'
awk '{print "'\''" $1 "'\''"}'

ou use um separador de campo de saída ímpar

awk -v OFS="'" '{print "", $1, ""}'

mas isso não é tão ruim

awk -v q="'" '{print q $1 q}'
    
por 09.08.2017 / 22:41
2

Você pode enviar sua saída para sed :

tail -3 newtag| awk '{print $1}'| sed "s/^/'/;s/$/'/"
    
por 09.08.2017 / 22:25
2

Outra maneira, usando código ASCII hexadecimal para ' :

tail -3 newtag | awk '{print "\x27" $1 "\x27" }'
    
por 09.08.2017 / 22:47
0

1. Uma aprovação com sed :

tail -3 newtag | sed "s/\(.*\)\s.*/''/"

Explicação: em sed , a string de substituição não precisa ser citada

2. Ou você pode usar perl :

tail -3 newtag | perl -anE "say qq('\$F[0]')"

Explicação:

  • perl linguagem de script que se destaca no processamento de texto
  • -a divide cada linha nos campos
  • n não imprime automaticamente cada linha
  • E executa o seguinte comando e ativa recursos como say
  • " inicia instruções com " porque mais tarde queremos usar '
  • say imprime a seguinte expressão e uma nova linha
  • qq( início da expressão literal que permite a interpolação de variáveis
  • ' a literal '
  • \$F[0] o primeiro "campo" na linha
  • ' a literal '
  • ) final da expressão literal
  • " end of instructions
por 10.08.2017 / 13:00