bash - txt - sed eliminar salto de linea
¿Cómo eliminar espacios extra en bash? (8)
Aproveche los efectos de división de palabras de no citar su variable
$ HEAD=" how to remove extra spaces "
$ set -- $HEAD
$ HEAD=$*
$ echo ">>>$HEAD<<<"
>>>how to remove extra spaces<<<
Si no quieres usar los parámetros posicionales, usa una matriz
ary=($HEAD)
HEAD=${ary[@]}
echo "$HEAD"
Un efecto secundario peligroso de no citar es que la expansión del nombre de archivo estará en juego. Así que apágalo primero y vuelve a habilitarlo después de:
$ set -f
$ set -- $HEAD
$ set +f
¿Cómo eliminar espacios extra en la variable HEAD
?
HEAD=" how to remove extra spaces "
Resultado:
how to remove extra spaces
Así es como lo haría con sed:
string='' how to remove extra spaces ''
echo "$string" | sed -e ''s/ */ /g'' -e ''s/^ */(.*/) *$//1/''
=> how to remove extra spaces # (no spaces at beginning or end)
La primera expresión sed reemplaza cualquier grupo de más de 1 espacio con un solo espacio, y la segunda expresión elimina los espacios al final o al principio.
Este caballo aún no está muerto: ¡sigamos derrotándolo! *
Leer en matriz
Otras personas han mencionado la read
, pero como el uso de la expansión sin comillas puede causar expansiones indeseables, todas las respuestas que se usen pueden considerarse más o menos iguales. Podrías hacerlo
set -f
read HEAD <<< $HEAD
set +f
o podrías hacer
read -a HEAD <<< "$HEAD"
HEAD="${HEAD[*]}"
Globos extendidos con expansión de parámetros
$ shopt -s extglob
$ HEAD="${HEAD//+( )/ }" HEAD="${HEAD# }" HEAD="${HEAD% }"
$ printf ''"%s"/n'' "$HEAD"
"how to remove extra spaces"
* En realidad, no se dañó a ningún caballo: esto fue simplemente una metáfora para obtener más de seis respuestas diferentes a una pregunta simple.
La variable echo sin comillas hace lo que quieres:
HEAD=" how to remove extra spaces "
echo $HEAD
salida: how to remove extra spaces
Prueba este:
echo '' how to remove extra spaces '' | sed ''s/^ *//g'' | sed ''s/$ *//g'' | sed ''s/ */ /g''
o
HEAD=" how to remove extra spaces "
HEAD=$(echo "$HEAD" | sed ''s/^ *//g'' | sed ''s/$ *//g'' | sed ''s/ */ /g'')
Prueba esto:
echo "$HEAD" | tr -s " "
o tal vez quieras guardarlo en una variable:
NEWHEAD=$(echo "$HEAD" | tr -s " ")
Actualizar
Para eliminar los espacios en blanco iniciales y finales, haga esto:
NEWHEAD=$(echo "$HEAD" | tr -s " ")
NEWHEAD=${NEWHEAD%% }
NEWHEAD=${NEWHEAD## }
Utilizando awk:
$ echo "$HEAD" | awk ''$1=$1''
how to remove extra spaces
echo -e " abc /t def "|column -t|tr -s " "
column -t
:
- Eliminar los espacios al principio y al final de la línea.
- convertir pestañas en espacios
tr -s " "
comprimirá múltiples espacios en un solo espacio
para ver la salida, puede usar cat - -A
: muestra todos los caracteres espaciales, incluidas las pestañas y la EOL:
echo -e " abc /t def "|cat - -A
salida: abc ^I def $
echo -e " abc /t def "|column -t|tr -s " "|cat - -A
salida: abc def$