tutorial scripts script programas manejo español ejemplos comandos comando cadenas bash trim

scripts - ¿Cómo puedo recortar líneas leídas de entrada estándar en bash?



scripts bash ejemplos (5)

Agrega esto:
| sed -r ''s//s*(.*?)/s*$//1/''

Quiero una forma sencilla de leer líneas desde la entrada estándar (para poder canalizarla a la entrada) y eliminar solo los caracteres de espacio iniciales y finales. Tubería para hacer eco no funciona.

Por ejemplo, si la entrada es:

12 s3c sd wqr

la salida debe ser:

12 s3c sd wqr

Quiero evitar escribir un script en python o algo similar para algo tan trivial como este. Cualquier ayuda es apreciada!


Puedes usar sed para recortarlo.

sed ''s/^ *//;s/ *$//''

Puedes probarlo realmente fácilmente en una línea de comando haciendo:

echo -n " 12 s3c " | sed ''s/^ *//;s/ *$//'' && echo c


Sé que esto es viejo, pero hay otra manera simple y sucia:

line=$(echo $line)

Vea este ejemplo:

user@host:~$ x=" abc " user@host:~$ echo "+$x+" + abc + user@host:~$ y=$(echo $x) user@host:~$ echo "$y" +abc+


$ trim () { read -r line; echo "$line"; } $ echo " aa bb cc " | trim aa bb cc $ a=$(echo " aa bb cc " | trim) $ echo "..$a.." ..aa bb cc..

Para que funcione para entradas de varias líneas, solo agregue un bucle while:

trim () { while read -r line; do echo "$line"; done; }

Usando sed con una sola sustitución:

sed ''s/^/s*/(.*[^ /t]/)/(/s/+/)*$//1/''


your_command | xargs -L1 echo

Esto funciona porque echo convierte todas las tablas en espacios y luego todos los espacios múltiples en un solo espacio, no solo al principio y al final, vea el ejemplo:

$ printf " 1/t/t/t2 3" 1 2 3 $ echo `printf " 1/t/t/t2 3"` 1 2 3

El inconveniente es que también eliminará algunos caracteres útiles como / '' " .