sed awk

sed - Eliminar caracteres no ASCII de CSV



awk (11)

Aprecio los consejos que encontré en este sitio.

Pero, en mi Windows 10, tuve que usar comillas dobles para que esto funcione ...

sed -i "s/[/d128-/d255]//g" FILENAME

Notó estas cosas ...

  1. Para FILENAME, toda la ruta / nombre necesita ser citada Esto no funcionó - %TEMP%/"FILENAME" Esto hizo - %TEMP%/FILENAME"

  2. sed deja atrás archivos temporales en el directorio actual, llamado sed *

Quiero eliminar todos los caracteres no ASCII de un archivo en su lugar.

Encontré una solución con tr, pero creo que necesito volver a escribir ese archivo después de la modificación.

Necesito hacerlo en lugar con un rendimiento relativamente bueno.

¿Alguna sugerencia?


Como alternativa a sed o perl, puede considerar usar las clases de caracteres ed (1) y POSIX.

Nota: ed (1) lee todo el archivo en la memoria para editarlo en el lugar, por lo que para los archivos realmente grandes debe usar sed -i ..., perl -i ...

# see: # - http://wiki.bash-hackers.org/doku.php?id=howto:edit-ed # - http://en.wikipedia.org/wiki/Regular_expression#POSIX_character_classes # test echo $''aaa /177 bbb /200 /214 ccc /254 ddd/r/n'' > testfile ed -s testfile <<< $'',l'' ed -s testfile <<< $''H/ng/[^[:graph:][:space:][:cntrl:]]/s///g/nwq'' ed -s testfile <<< $'',l''


Esto funcionó para mí:

sed -i ''s/[^[:print:]]//g''


Estoy usando un sistema busybox muy mínimo, en el cual no hay soporte para los rangos en las clases de caracteres tr o POSIX, así que tengo que hacerlo a la vieja usanza. Aquí está la solución con sed , eliminando TODOS los caracteres no ASCII no imprimibles del archivo:

sed -i ''s/[^a-zA-Z 0-9`~!@#$%^&*()_+/[/]//{}|;''/''':",.//<>?]//g'' FILE



Pruebe tr lugar de sed

tr -cd ''[:print:]'' < file.txt


Un perl oneliner haría: perl -i.bak -pe ''s/[^[:ascii:]]//g'' <your file>

-i dice que el archivo se editará en el lugar, y la copia de seguridad se guardará con la extensión .bak .


# -i (inplace) LANG=C sed -i ''s/[/d128-/d255]//g'' FILENAME

El rol de la parte LANG=C es evitar un Invalid collation character .

Basado en la respuesta de Ivan y el comentario de Patrick.


# -i (inplace) sed -i ''s/[/d128-/d255]//g'' FILENAME


awk ''{ sub("[^a-zA-Z0-9/"!@#$%^&*|_/[](){}", ""); print }'' MYinputfile.txt > pipe_out_to_CONVERTED_FILE.txt


sed -i ''s/[^[:print:]]//'' FILENAME

Además, esto actúa como dos2unix