
Quiero realizar una búsqueda y reemplazo complejos que hago con notepad++ usando la línea de comando. Encontré muchas soluciones en la web pero ninguna cumple con mis requisitos.
Tengo un archivo en el que quiero realizar búsqueda y reemplazo de expresiones regulares
Otro archivo que contiene cadenas de expresiones regulares (tanto buscar como reemplazar con. Puedo jugar con eso para crear dos archivos separados o cualquier cosa).
Indique también cómo colocar expresiones regulares para buscar y reemplazar cadenas en este archivo si es posible realizar la tarea anterior.
Editar
¿Alguna utilidad de búsqueda y reemplazo compatible con PCRE para Windows?
Respuesta1
existe el comando "findstr" de Windows, pero no se puede reemplazar y tiene soporte limitado para expresiones regulares. Más allá de eso, vea cómo hacerlo con *nix y luego use esas herramientas en Windows. Entonces puedes obtener grep y sed para Windows.
Algunas personas que trabajan con lotes pueden usar una herramienta (quizás escrita por el experto en lotes Dave Benham) que fusiona microsoft jscript con lotes y tiene opciones para buscar y reemplazar. Supongo que es perfecto si estás en un sistema muy bloqueado y ni siquiera puedes descargar un EXE. Pero, de lo contrario, descargar o copiar/pegar un script es casi como obtener algo de un tercero y luego ya existen herramientas como grep y sed que se usan ampliamente y se pueden descargar para Windows.
La *?
evaluación es diferida, que es un poco avanzada y necesita -P (PCRE - expresiones regulares compatibles con Perl)
C:\>echo abccccdd| grep -oP "a.*?c"
abc
C:\>
Puede eliminar -P si lo desea, si la expresión regular es menos avanzada. Aunque lo conservo.
Sed no llega tan lejos como PCRE, pero admite lo que parece ser la mejor opción con estas utilidades de línea de comandos. ERE (expresiones regulares extendidas). Usar sed con -r puede evitar tener que usar barras invertidas superfluas. La última vez que lo comprobé, sin -r usa BRE (expresiones regulares básicas).
Esto significa reemplazar esa coincidencia de expresiones regulares con nada
C:\>echo abccccdd| sed -r "s/c{2,3}//"
abcdd
Este modificador /g realizará una búsqueda global y reemplazará, por lo que no solo reemplazará la primera coincidencia.
C:\>echo abacacda| sed "s/a//g"
bccd
Puede obtenerlo con gnuwin32, o puede usarlo desde cygwin, aunque luego use comillas simples y, si usa cygwin, es mejor hacerlo desde el shell de cygwin, por ejemplo, el shell bash de cygwin.
Obviamente, estos comandos pueden operar en archivos.
C:\>type a.a
asdf
C:\>
C:\>grep -o a a.a
a
C:\>sed "s/a/z/" a.a
zsdf
C:\>
O Perl
grep no buscará ni reemplazará. Sed lo hará, aunque sed no es compatible con PCRE (al menos no el sed que tengo). Otra opción es Perl. Perl Regexes son tan buenos como PCRE, si no mejores. Mira aquíhttps://stackoverflow.com/questions/4794145/perl-one-liner-like-grepy mira que menciona este enlace¿Perl para hacer coincidir con expresiones regulares en Terminal?mira mi respuesta allí, tiene formas perl de grep y sed, y obviamente tendrás un excelente soporte de expresiones regulares con perl
Si ve mi respuesta en ese segundo enlace (como dije), verá que digo que obtuve y usé perl allí en cygwin, y también cómo se puede usar.