2011-06-29 11 views
15

Tengo líneas con un solo : y un ' en ellos de los que quiero deshacerme. Quiero usar awk para esto. He intentado usar:reemplazando el `'' char usando awk

awk '{gsub ("[:\\']","") ; print $0 }' 

y

awk '{gsub ("[:\']","") ; print $0 }' 

y

awk '{gsub ("[:']","") ; print $0 }' 

de ellos no funcionaba, pero devolver el error Unmatched ".. cuando pongo

awk '{gsub ("[:_]","") ; print $0 }' 

entonces funciona y elimina todos los : y _ caracteres. ¿Cómo puedo deshacerme del char '?

Respuesta

6

que puede usar:

  1. código octal para la comilla simple:

    [:\47] 
    
  2. La comilla simple entre comillas dobles, pero en ese caso especial caracteres será ampliado por el shell :

    % print a\': | awk "sub(/[:']/, x)"   
    a 
    
  3. Utilice una expresión regular dinámica, pero hay implicaciones de rendimiento relacionados a este enfoque:

    % print a\': | awk -vrx="[:\\\']" 'sub(rx, x)' 
    a 
    
11

tr está hecho para este fin

echo test\'\'\'\':::string | tr -d \': 
teststring 

$ echo test\'\'\'\':::string | awk '{gsub(/[:\47]*/,"");print $0}' 
teststring 
8

Esto funciona:

awk '{gsub("[:'\'']",""); print}' 
6

Con fiesta no se puede insertar una única cita dentro de un literal rodeado de comillas simples. Use '"'"' por ejemplo.

Primera ' cierra los actuales literales, entonces "'" concatena con una que contiene sólo una comilla simple literal, y ' vuelve a abrir una cadena literal, que será también concatenada.

Lo que queremos es: alternativa

awk '{gsub ("[:'"'"']","") ; print $0; }' 

de ssapkota también es bueno ('\'').

2

No sé por qué te estás restringiendo a usar awk, de todos modos tienes muchas respuestas de otros usuarios. También puede utilizar sed para deshacerse de ": '"

sed 's/:\'//g' 

Esto también servirá para su propósito. Simple y menos complejo.

2

Esto también funciona:

awk '{gsub("\x27",""); print}'

0

más simple awk '{gsub(/\047|:/,"")};1'

Cuestiones relacionadas