with tutorial regular regexp examples regex linux bash tr slash

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 ..