Tengo un archivo que contiene varias líneas de xml. Me gustaría reemplazar ciertas partes del archivo. Algunas partes del archivo contienen comillas ( "
) que me gustaría reemplazar. He estado tratando de escapar de las comillas \
, pero no creo que esto funcione en función del resultado de mi archivo.
Aquí hay un ejemplo de uno de mis comandos sed:
sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp
¿Es así como escapas de comillas en un comando sed o estoy haciendo algo mal?
"text"
con'text'
. Por supuesto que no hará nada"othertext"
. Muestre algunas líneas de entrada, la salida no deseada correspondiente, y explique qué salida desea en su lugar.\"
es la forma correcta de escapar de las comillas en el comando sed?"
. Pero su comando de shell utiliza una cadena entre comillas dobles y\"
es correcta allí. Elsed
programa ves/"text"/'text'/ig
como el argumento para-e
.s/\"text\" /'text'/ig
¿Encontraría solo"text"
con el espacio después?sed
es la herramienta adecuada para el trabajo, tal vez desee un analizador XML.Respuestas:
Dos consejos:
No puede escapar de una comilla simple dentro de una cadena entre comillas simples. Por lo tanto, debe cerrar la cotización, agregar una cotización escapada y luego abrir las cotizaciones nuevamente. Es decir
'foo'\''bar'
, que se desglosa como:'foo'
citadofoo
\'
escapado'
'bar'
citadobar
cediendo
foo'bar
./
en sed. Encuentro que usar/
y\
en la misma expresión sed hace que sea difícil de leer.Por ejemplo, para eliminar las comillas de este archivo:
Dados mis dos consejos anteriores, el comando que puede usar para eliminar las comillas dobles y simples es:
Basado en mi primer consejo, el shell reduce el segundo argumento de sed (es decir, la cadena después de
-e
)s|["']||g
y pasa esa cadena a sed. Según mi segundo consejo, sed trata esto igual ques/['"]//g
. SignificaProbablemente necesite algo más complejo que esto para hacer lo que quiere, pero es un comienzo.
fuente
'foo'\''bar'
, podríamos usar'foo'"'"'bar'
.Tengo un puerto de Windows de utilidades Unix, por lo que los comandos se ven un poco diferentes, pero tenía un archivo csv con comas y comillas. Usando este hilo como guía, pude eliminar las comillas a través de este comando:
fuente