Grep으로 교체

Grep으로 교체

다음과 같은 샘플 텍스트가 있습니다.

\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}

\stylea{ }라는 단어를 모두 삭제하고 {} 안의 단어는 그대로 유지하고 싶습니다.

\stylea{를 찾아서 바꿀 수 있고 공백으로 바꿀 수 있다는 것을 알고 있지만 공백도 원하지 않고 동시에 닫는 중괄호 }도 삭제하고 싶습니다.

그리고 Geany에서는 선택한 블록에서만 단어를 바꿀 수 있나요? 예를 들어, 1~8행을 선택하고 stylea를 styleb로 바꾸면?

답변1

Grep으로 교체

정규식 검색/바꾸기를 사용하여 이 작업의 대부분을 수행할 수 있습니다.

바꾸기 대화 상자를 사용하여 "정규 표현식 사용"이 선택되어 있고 "여러 줄 일치 사용"이 선택되어 있지 않은지 확인하십시오.

검색:

\\stylea{(.*)}

그리고 다음으로 바꾸세요:

\1

이는 검색 표현식(괄호 안의 부분)에서 "캡처된" 텍스트에 대한 정규 표현식 "역참조"입니다. 여러 개의 캡처가 있는 경우 \1, \2등을 사용하여 참조할 수 있습니다 .

그러나 정규식에는 약간의 슬픔을 초래할 수 있는 제한 사항이 있다는 점을 명심하세요. 다음과 같이 텍스트 안에 중괄호가 중첩된 줄이 있습니다.

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

정규식은 (자체적으로) {}이와 같이 중첩 구분 기호( )를 계산하고 일치시킬 수 없습니다. 귀하의 경우 캡처는 (.*)줄이 끝나기 전에 가능한 한 많은 문자와 일치하기 때문에("탐욕스러운 일치") 샘플 텍스트에서 올바른 일을 수행하기 때문에 이것이 실제적인 문제로 끝나지 않을 수 있습니다. 각 \stylea{}태그는 한 줄에 있습니다. 여러 줄에 걸쳐 태그가 포함된 파일이 있는 경우 \stylea{}이 방법은 텍스트를 제대로 바꾸지 않습니다. 가장 좋은 방법은 먼저 해당 인스턴스를 찾아 직접 변경하거나 여러 줄에 걸쳐 있지 않은지 확인하는 것입니다.

이는 정규식 검색/바꾸기를 제공하는 많은 편집기에서 작동하지만 대화 상자 옵션의 세부 사항은 물론 다양합니다. Mac OS X용 TextWrangler에서 테스트했습니다.

선택에서만 바꾸기

8개의 번호가 매겨진 줄을 선택합니다. 검색:

\\stylea{

그리고 다음으로 바꾸세요:

\\styleb{

그런 다음 바꾸기 대화 상자에서 "선택 내" 버튼을 클릭합니다.

관련 정보