quitar - sed reemplazar comillas
¿Cómo escapar de comillas simples en sed? (5)
Cita códigos sed
con comillas dobles:
$ sed "s/ones/one''s/"<<<"ones thing"
one''s thing
No me gusta escapar de los códigos con cientos de barras diagonales, me duele la vista. Usualmente lo hago de esta manera:
$ sed ''s/ones/one/x27s/''<<<"ones thing"
one''s thing
¿Cómo escapar una única cita en una expresión sed que ya está rodeada por comillas?
Por ejemplo:
sed ''s/ones/one''s/'' <<< ''ones thing''
La mejor forma es usar $''some string with /' quotes /'''
p.ej:
sed $''s/ones/two/'s/'' <<< ''ones thing''
Sé que esto va a sonar como una salida de policía, pero nunca podría funcionar Sed cuando había comillas simples y dobles en la cadena. Para ayudar a los novatos como yo que están teniendo problemas, una opción es dividir la cadena. Tuve que reemplazar el código en más de 100 archivos index.hmtl. Las cadenas tenían comillas simples y dobles, así que simplemente separé la cadena y reemplacé el primer bloque con <!--
y el segundo bloque con -->
. Hizo un lío de mis archivos index.html pero funcionó.
Simplemente use comillas dobles en el exterior del comando sed.
$ sed "s/ones/one''s/" <<< ''ones thing''
one''s thing
Funciona con archivos también.
$ echo ''ones thing'' > testfile
$ sed -i "s/ones/one''s/" testfile
$ cat testfile
one''s thing
Si tiene comillas simples o dobles dentro de la cadena, también está bien. Solo escapa de las comillas dobles.
Por ejemplo, este archivo contiene una cadena con comillas simples y dobles. Usaré sed para agregar una comilla simple y eliminar algunas comillas dobles.
$ cat testfile
"it''s more than ones thing"
$ sed -i "s//"it''s more than ones thing/"/it''s more than one''s thing/" testfile
$ cat testfile
it''s more than one''s thing
Un truco es usar la concatenación de cadenas de shell de cadenas adyacentes y escapar de la cita incrustada utilizando el escape de shell:
sed ''s/ones/two''/'''s/'' <<< ''ones thing''
two''s thing
Hay 3 cadenas en la expresión sed, que el shell luego une:
sed ''s/ones/two''
/'
''s/''
Espero que ayude a alguien más!