textos texto separen quitar que pego palabras los las justifico justificar espacios espacio entre eliminar cuando copio como shell find whitespace removing-whitespace in-place

shell - texto - ¿Cómo eliminar los espacios en blanco finales para varios archivos?



espacio entre palabras word (7)

¿Hay herramientas / líneas únicas de UNIX que eliminarían los espacios en blanco finales para múltiples archivos en el lugar .

Ej. Uno que podría usarse en la conjunción con find .


ex

Intenta usar el editor Ex (parte de Vim):

$ ex +''bufdo!%s//s/+$//e'' -cxa *.*

Nota: Para recursividad (bash4 y zsh), puede usar una nueva opción globbing ( **/*.* ). Habilitado por shopt -s globstar .

perl

find . -type f -name "*.java" -exec perl -p -i -e "s/[ /t]$//g" {} /;

según el estilo de Spring Framework Code .

sed

Para usar sed , compruebe: ¿Cómo eliminar los espacios blancos finales con sed?

Vea también: ¿Cómo eliminar el espacio en blanco final de todos los archivos recursivamente?


A diferencia de otras soluciones que requieren GNU sed, esta debería funcionar en cualquier sistema Unix que implemente comandos estándar POSIX.

find . -type f -name "*.txt" -exec sh -c ''for i;do sed ''s/[[:space:]]*$//'' "$i">/tmp/.$$ && mv /tmp/.$$ "$i";done'' arg0 {} +

Editar: esta versión ligeramente modificada conserva los permisos de los archivos:

find . -type f -name "*.txt" -exec sh -c ''for i;do sed ''s/[[:space:]]*$//'' "$i">/tmp/.$$ && cat /tmp/.$$ > "$i";done'' arg0 {} +


He estado usando this para arreglar el espacio en blanco:

while IFS= read -r -d '''' -u 9 do if [[ "$(file -bs --mime-type -- "$REPLY")" = text/* ]] then sed -i -e ''s/[ /t]/+/(/r/?/)$//1/;$a/' -- "$REPLY" else echo "Skipping $REPLY" >&2 fi done 9< <(find . /( -type d -regex ''^.*//./(git/|svn/|hg/)$'' -prune -false /) -o -type f -print0)

caracteristicas:

  • Mantiene los retornos de carro (a diferencia de [:space:] ), por lo que funciona bien en los archivos de estilo Windows / DOS.
  • Solo se preocupa por el espacio en blanco "normal": si tiene pestañas verticales o algo similar en sus archivos, probablemente sea intencional (código de prueba o datos sin formato).
  • Salta los directorios .git y .svn VCS.
  • Solo modifica los archivos cuyo file cree que es un archivo de texto.
  • Informa todas las rutas que fueron salteadas.
  • Funciona con cualquier nombre de archivo.

Para aquellos que no son sed gurús (incluido yo mismo) he creado un pequeño script para usar expresiones regulares de JavaScript para reemplazar el texto en los archivos y el reemplazo en su lugar:

http://git.io/pofQnQ

Para eliminar espacios en blanco al final puedes usarlo como tal:

$ node sed.js "/^[/t ]*$/gm" "" file

Disfrutar


Por alguna razón, los comandos sed y perl no funcionaron para mí. Esto hizo:

find ./ -type f | rename ''s/ +$//g''

Se siente como el más directo para leer también



Usted quiere

sed --in-place ''s/[[:space:]]/+$//'' file

Eso eliminará todos los caracteres de espacios en blanco definidos por el estándar POSIX, incluida la pestaña vertical y el avance del formulario. Además, solo hará un reemplazo si el espacio en blanco final realmente existe, a diferencia de las otras respuestas que usan cero o más matcher ( * ).

--in-place es simplemente la forma larga de -i . Prefiero usar la forma larga en las secuencias de comandos porque tiende a ser más ilustrativo de lo que la bandera realmente hace.

Se puede integrar fácilmente con find as so:

find . -type f -name ''*.txt'' -exec sed --in-place ''s/[[:space:]]/+$//'' {} /+

Si estás en una Mac

Como se señaló en los comentarios, lo anterior no funciona si no tiene instaladas las herramientas gnu. Si ese es el caso, puede usar lo siguiente:

find . -iname ''*.txt'' -type f -exec sed -i '''' ''s/[[:space:]]/{1,/}$//'' {} /+