2011-03-31 7 views
8

tengo línea del archivo de registro:sustituir los espacios sólo en entre comillas

field 1234 "text in quotes" 1234 "other text in quotes" 

quisiera sustituir los espacios entre comillas, por lo que podría columnas de extracto utilizando el espacio como delimitador. Así, el resultado podría ser algo así como

field 1234 "[email protected]@quotes" 1234 "[email protected]@[email protected]" 

yo no era capaz de encontrar expresiones regulares de trabajo para mí sed. Muchas gracias por ayuda. Martin

Respuesta

6

Pipe su archivo de registro a través de este comando awk:

awk -F\" '{OFS="\"";for(i=2;i<NF;i+=2)gsub(/ /,"@",$i);print}' 
+0

esto es inteligente! –

+0

@Hai Vu: gracias. :-) –

1

mediante el uso de comillas dobles como RS todos, incluso los registros son los que dentro de comillas dobles. reemplazar el espacio en esos registros pares. Como el separador de registros de salida es una nueva línea por defecto, cámbiela a comillas dobles.

awk 'BEGIN {RS="\"";ORS="\"" }{if (NR%2==0){gsub(/ /,"@",$0);print $0}else {p 
rint $0}}' InputText.txt 
+0

esto deja un '' 'al final en una nueva línea – Orwellophile

0

Si decide cambiar sed con más ricos de la característica perl entonces aquí es un trazador de líneas para conseguir lo que necesita:

line='field 1234 "text in quotes" 1234 "other text in quotes"' 
echo $line | perl -pe 's#("[^"]*")#sub{$p=$1; $p =~ tr/ /@/; return $p}->()#eg' 

Output: field 1234 "[email protected]@quotes" 1234 "[email protected]@[email protected]" 
Cuestiones relacionadas