¿Cómo elimino todas las líneas que contienen caracteres de teclado que no sean ASCII?
Intenté muchas veces códigos de expresiones regulares pero ninguno funciona como debería. Incluso probé este código [^\x00-\x7F]+
pero no seleccionó todos los caracteres.
La idea que se me ocurrió es usar de esta manera, [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
pero todavía no funciona porque algunos de estos personajes no fueron deseleccionados como\
/
|
{
}
[
]
$
#
^
(
)
Si una línea contiene caracteres que no están en la lista siguiente, quiero eliminarla, eliminarla o marcarla como favorita.
0123456789`~!@#$%^&*()-_=+[]{}\/|;:'"<>,.? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
Ejemplo simple: hay más caracteres como este que se encuentran aquí:https://en.wikipedia.org/wiki/List_of_Unicode_characters
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ ¤©ª«¬¯°±²³´µ¶·¸¹º»¼½¾¿÷ÆIJŒœƔƕƋƕ ƜƝƢƸƾDžNJNjǽǾǼɁɀȾɎʒəɼʰʲʱʴʳʵʶʷʸˁˀˇˆ˟ˠ ˩˧Ͱͱͳʹͼͻͺ͵ͿΏΔΘΞΛΣΠΦΧΨΩΪΫάέήίΰαβδε θηκλμξπςρφχψωϊϋϏώϑϐϓϒϔϕϖϠϟϞϝϜϡϢ ϤϣϧϫϬϮϯϰϱ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲ ₳₴₵₶₷₸₹₺₻₼₽₾₿⅐⅑⅒⅓⅔⅕⅖⅗⅘⅙⅚⅛⅜ ⅝⅞⅟℠℡™℣ℤ℥Ω℧ℨ℩KÅℬℭ℮ℯ⇀⇁ↀↁↂↃↄ ⇔⇕⇖⇗⇘⇙⇚⇛⇜⇝⇞⇟⇠⇡⇢⇣⇤⇥⇦⇧⇨⅀⅁⅂⅃⅄ⅅ ⅆⅇⅈⅉ⅊⅋⅌⅍ⅎ⅏ⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⅼⅽ
Resultado Esperado:
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./? abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
Respuesta1
[^\x00-\x7F]
funciona bien, pero si desea utilizar una clase de caracteres largos como [^a-z0-9``~!@#$%^&*()-_=+[]{}\|;:'"<>,./?]
los que tiene que escapar de los caracteres que tienen un significado especial (es decir, -[]\
y agregar saltos de línea \r
, \n
.
Tu expresión regular se convierte en:
[^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]
# ^ ^ ^ ^ ^^^^
- Ctrl+H
- Encuentra qué:
[^a-z0-9``~!@#$%^&*()\-_=+\[\]{}\\|;:'"<>,./?\r\n]+$
pero, nuevamente,[^\x00-\x7F]
funciona bien y es más legible - Reemplazar con:
LEAVE EMPTY
- comprobar Envolver alrededor
- comprobar expresión regular
- Replace all
Resultado para el ejemplo dado:
0123456789`~!@#$%^&*()-_=+[]{}\|;:'"<>,./?
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
Respuesta2
Si no conoce la solución y no utiliza Notepad++, puede instalar bash para Win 10, como mostré aquí.https://superuser.com/a/1252271/715210(Lo siento, siempre vuelvo a tus preguntas sobre soluciones alternativas de Linux;))
Tendría una solución, donde lamentablemente también perderás el apóstrofo.'
- abrir bash para Windows desde el menú inicio
- Vaya a la carpeta donde se encuentra su archivo
cd /mnt/c/path/folder
(la unidad C: está en /mnt/c) Si su archivo se llamafoo.txt podrías generar un archivobarra.txtcon este comando:
cat foo.txt | tr -cd '[:alnum:]\n\r~!@#$%^&*()-_=+{}\|;:<>,./?"`' | sed '/^$/d' > bar.txt
Explicación de las partes:
cat foo.txt
genera el archivo de texto y con la tubería |
la salida se redirige al comando tr -cd
que elimina todos los caracteres que no están en la lista después de entre '...'. Followed by a pipe to
sed to remove the empty lines. Last but not least with
> bar.txt` redirigimos la salida al archivobarra.txt
Gracias a:
- https://stackoverflow.com/a/20007549/7311363para el consejo :alnum:
- https://unix.stackexchange.com/a/48568/223965para la explicación del apóstrofe
Respuesta3
En Notepad++ esto es fácil:
menúBuscar>Marca...
Encuentra qué:
[^\x00-\x7F]
☑ Marcar línea
(•) Expresión regularPrensaEncuentra todos
menúBuscar>Marcador>Eliminar líneas marcadas