Reemplazo con Grep

Reemplazo con Grep

Tengo un texto de muestra como este:

\documentclass[a4paper]{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{color}
\setlength{\parindent}{0em}
\setlength{\parskip}{2ex plus1ex minus0.5ex}
\newcommand{\stylea}[1]{\noindent{\textcolor[rgb]{0.9, 0.9, 0.8}{\fcolorbox[rgb]{0, 0, 0}{0.2, 0.2, 0.2}{#1}}}}

\begin{document}
\ttfamily
\setlength{\fboxrule}{0pt}
\setlength{\fboxsep}{0pt}
1 \stylea{\# Author{\hspace*{1em}}: Bhishan Poudel} \\
2 \stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016} \\
3 \stylea{} \\
4 \stylea{Line wrapping in geany} \\
5 \stylea{===============================================================================} \\
6 \stylea{edit > preference > editor > features > line wrapping} \\
7 \stylea{then,} \\
8 \stylea{document > line wrapping} \\
\end{document}

Quiero eliminar todas las palabras \stylea{ }, manteniendo intactas las palabras dentro de {}.

Sé que puedo buscar y reemplazar \stylea{ y reemplazar por espacios en blanco, pero ni siquiera quiero espacios en blanco y también quiero eliminar la llave de cierre,}, al mismo tiempo.

¿También podemos reemplazar palabras solo en el bloque seleccionado en Geany? Por ejemplo, ¿si selecciono las líneas 1 a 8 y reemplazo stylea por styleb?

Respuesta1

Reemplazo con Grep

Puede hacer (la mayor parte) de esto con la búsqueda/reemplazo de expresiones regulares.

Utilice el cuadro de diálogo Reemplazar, asegurándose de que "Usar expresiones regulares" esté seleccionado y "Usar coincidencia de varias líneas" no.

Buscar:

\\stylea{(.*)}

Y reemplazar con:

\1

Esta es una expresión regular "referencia anterior" al texto "capturado" en la expresión de búsqueda (la parte dentro del paréntesis). Si tuviera varias capturas, podría hacer referencia a ellas con \1, \2, etc.

Sin embargo, tenga en cuenta que existe una limitación en las expresiones regulares que probablemente le cause cierta molestia. Tiene algunas líneas donde tiene llaves anidadas dentro del texto, como por ejemplo:

\stylea{\# Date{\hspace*{1em}}{\hspace*{1em}}: May 19, 2016}

Las expresiones regulares no pueden (por sí mismas) contar ni hacer coincidir delimitadores de anidamiento ( {}) como este. En su caso, es posible que esto no termine siendo un problema práctico porque la (.*)captura coincidirá con tantos caracteres como sea posible antes del final de la línea ("coincidencia codiciosa"), lo que en su texto de muestra hace lo correcto, porque cada \stylea{}etiqueta está en una línea. Si tiene archivos con \stylea{}etiquetas que abarcan varias líneas, este método no reemplazará el texto correctamente. Su mejor opción puede ser encontrar esas instancias primero y cambiarlas manualmente o asegurarse de que no ocupen varias líneas.

Esto debería funcionar con muchos editores que ofrecen búsqueda/reemplazo de expresiones regulares, aunque los detalles de las opciones de diálogo, por supuesto, variarán. Lo probé en TextWrangler para Mac OS X.

Reemplazar solo en la selección

Seleccione las 8 líneas numeradas. Buscar:

\\stylea{

Y reemplazar con:

\\styleb{

Luego haga clic en el botón "En selección" en el cuadro de diálogo Reemplazar.

información relacionada