comando shell unix tr

shell - comando - tr bash



Cómo reemplazar un carácter con dos caracteres utilizando tr (5)

No, tr está destinado específicamente a reemplazar caracteres individuales por caracteres individuales (o, según las opciones de la línea de comandos, eliminar caracteres o reemplazar ejecuciones de un solo carácter por una aparición).

sed es probablemente la mejor herramienta para este trabajo en particular:

$ echo "asdlksad ~ adlkajsd ~ 12345" | sed ''s/~/~/n/g'' asdlksad ~ adlkajsd ~ 12345

(Tenga en cuenta que esto requiere que sed interprete la secuencia backlash-n /n como un carácter de nueva línea. GNU sed hace esto, pero POSIX no lo especifica excepto dentro de una expresión regular, y definitivamente hay versiones más antiguas de sed que no lo hacen .)

¿Se puede reemplazar un carácter por dos caracteres?

Estoy tratando de reemplazar "~" con "~ / n" pero la salida no produce la nueva línea.

$ echo "asdlksad ~ adlkajsd ~ 12345" | tr "~" "~/n" asdlksad ~ adlkajsd ~ 12345


no se puede hacer, lo siento

tr está destinado a transliterar un personaje con otro.

Hay numerosas opciones, pero yo usaría awk , es decir,

echo "asdlksad ~ adlkajsd ~ 12345" | awk ''{gsub(/[~]/, "&/n")};1''

salida

asdlksad ~ adlkajsd ~ 12345


usted podría ir con awk, deje que la variable FS / OFS haga el trabajo por usted:

awk -F''~'' -v OFS="~/n" ''$1=$1''

prueba con tu ejemplo:

kent$ awk -F''~'' -v OFS="~/n" ''$1=$1'' <<< "asdlksad ~ adlkajsd ~ 12345" asdlksad ~ adlkajsd ~ 12345


tr sólo puede hacer 1 a 1 traducción.

Aquí hay una forma de hacerlo usando Pure Bash:

s=''"asdlksad ~ adlkajsd ~ 12345'' r=$''~/n'' echo -e "${s///~/$r}" asdlksad ~ adlkajsd ~ 12345


echo "asdlksad ~ adlkajsd ~ 12345" | sed ''s/~/~|/g'' | tr ''|'' ''/n''

- Esto funcionará a la perfección, ya que estoy teniendo problemas para reemplazar / n