Substituindo por Grep

Substituindo por Grep

Eu tenho um texto de exemplo 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}

Quero excluir todas as palavras \stylea{ }, mantendo as palavras dentro de {} intactas.

Eu sei que posso encontrar e substituir \stylea{ e substituir por espaço em branco, mas nem quero espaço em branco e também quero excluir a chave de fechamento, }, ao mesmo tempo.

Também podemos substituir palavras apenas no bloco selecionado no Geany? Por exemplo, se eu selecionar as linhas 1 a 8 e substituir stylea por styleb?

Responder1

Substituindo por Grep

Você pode fazer (a maior parte) isso com pesquisa/substituição de expressões regulares.

Use a caixa de diálogo Substituir, certificando-se de que "Usar expressões regulares" esteja selecionado e "Usar correspondência multilinha" não.

Procurar:

\\stylea{(.*)}

E substitua por:

\1

Esta é uma expressão regular "referência anterior" ao texto "capturado" na expressão de pesquisa (a parte entre parênteses). Se você tivesse várias capturas, poderia consultá-las com \1, \2, etc.

No entanto, lembre-se de que há uma limitação nas expressões regulares que provavelmente lhe causará algum sofrimento. Você tem algumas linhas com chaves aninhadas dentro do texto, como:

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

Expressões regulares não podem (por si só) contar e corresponder delimitadores de aninhamento ( {}) assim. No seu caso, isso pode não acabar sendo um problema prático porque a (.*)captura irá corresponder ao máximo de caracteres possível antes do final da linha ("correspondência gananciosa"), o que no seu texto de exemplo faz a coisa certa, porque cada \stylea{}tag está em uma linha. Se você tiver arquivos com \stylea{}tags abrangendo várias linhas, esse método não substituirá o texto corretamente. Sua melhor opção pode ser encontrar essas instâncias primeiro e alterá-las manualmente ou certificar-se de que não ocupem várias linhas.

Isso deve funcionar com muitos editores que oferecem pesquisa/substituição de expressões regulares, embora os detalhes das opções de diálogo possam variar. Eu testei no TextWrangler para Mac OS X.

Substituindo apenas na seleção

Selecione as 8 linhas numeradas. Procurar:

\\stylea{

E substitua por:

\\styleb{

Em seguida, clique no botão "Na seleção" na caixa de diálogo Substituir.

informação relacionada