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 /
''
"
.