regex - tutorial - Reemplazar barra en Bash
sed regular expression linux (5)
Esto no se ha dicho en otras respuestas, así que pensé en añadir algunas aclaraciones:
tr
utiliza dos conjuntos de caracteres para el reemplazo, y los caracteres del primer conjunto se reemplazan con los del segundo conjunto en una correspondencia de uno a uno. La página del manual dice que
SET2 se extiende a la longitud de SET1 al repetir su último carácter según sea necesario. El exceso de caracteres de SET2 se ignora.
Ejemplo:
echo abca | tr ab de # produces decd
echo abca | tr a de # produces dbcd, ''e'' is ignored
echo abca | tr ab d # produces ddcd, ''d'' is interpreted as a replacement for ''b'' too
Cuando use sed
para las sustituciones, puede usar otro carácter que no sea ''/'' para el delimitador, lo que hará que su expresión sea más clara (me gusta usar '':'', @ n34_panda propuso ''#'' en su respuesta). No te olvides de usar el modificador /g
para reemplazar todas las apariciones: sed ''s:/:///:g''
con comillas o sed s:/://///:g
sin'' (las barras invertidas tienen que escaparse dos veces) ).
Finalmente, su solución más corta probablemente será la respuesta de @Luc-Olivier, que involucra la sustitución, en la siguiente forma (no olvide escapar también barras diagonales cuando parte del patrón esperado):
echo ${variable/expected/replacement} # will replace one occurrence
echo ${variable//expected/replacement} # will replace all occurrences
Supongamos que tengo esta variable:
DATE="04/Jun/2014:15:54:26"
.
En esto necesito reemplazar /
con //
para obtener la cadena:
"04//Jun//2014:15:54:26"
.
Intenté tr
como sigue:
echo "04/Jun/2014:15:54:26" | tr ''/' ''///''
Pero esto resulta en: "04/Jun/2014:15:54:26"
.
No me satisface. ¿Alguien puede ayudar?
No hay necesidad de usar un eco + un pipe + sed.
Una simple variable de sustitución es suficiente y más rápida:
echo ${DATE////////}
#> 04//Jun//2014:15:54:26
También puedes escapar de las barras diagonales, con una solución un poco menos legible que con hashes:
echo "04/Jun/2014:15:54:26" | sed ''s/////////g''
Use SED para las sustituciones:
sed ''s#/#///#g'' < filename.txt > newfilename.txt
Usualmente usas "/" en lugar de "#" pero mientras esté ahí no importa.
Estoy escribiendo esto en una PC con Windows, así que espero que sea correcto, puede que tengas que escapar de las barras con otra barra.
Se explica, el "-e", le permite editar el archivo en su lugar. Puede utilizar -i para crear una copia de seguridad automáticamente.
sed -e s/STRING_TO_REPLACE/STRING_TO_REPLACE_IT/g index.html
aqui tienes:
kent$ echo "04/Jun/2014:15:54:26"|sed ''s#/#///#g''
04//Jun//2014:15:54:26
tu línea tr
no era correcta, puedes entender mal lo que tr
hace, tr ''abc'' ''xyz''
cambiará a->x, b->y, c->z
, no cambiando todo abc->xyz
..