Quiero reemplazar algunos caracteres de una cadena con sed.
Probé los siguientes dos enfoques, pero necesito saber si hay una forma más elegante para obtener el mismo resultado, sin usar las tuberías o la opción -e :
sed 's#a#A#g' test.txt | sed 's#l#23#g' > test2.txt sed -e 's#a#A#g' -e 's#l#23#g' test.txt > test2.txtEn lugar de varias opciones -e , puede separar los comandos con ; en un solo argumento.
sed 's/a/A/g; s/1/23/g' test.txt > test2.txt Si está buscando una manera de hacer múltiples sustituciones en un solo comando, no creo que haya una manera. Si todos fueran reemplazos de un solo carácter, podría usar un comando como y/abc/123 , que reemplazaría a con 1 , b con 2 y c con 3 . Pero no hay una versión de varios personajes de esto.
Además de la respuesta de Barmar, es posible que desee utilizar clases de caracteres regexp para realizar varios caracteres en una sustitución de carácter específica.
Aquí hay un ejemplo para aclarar las cosas, intente ejecutarlo con y sin sed para sentir el efecto.
echo -e 'abc\ndef\nghi\nklm' | sed 's/[adgk]/1/g; s/[behl]/2/g; s/[cfim]/3/g'
PS nunca ejecute código de ejemplo de extraños fuera de la caja de arena segura
Cuando tenga muchas cadenas para el reemplazo, puede recopilarlas en una variable.
seds="s/a/A/;" seds+="s/1/23/;" echo "That was 1 big party" | sed ${seds}