替換為 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{

然後點選「取代」對話方塊中的「在選擇中」按鈕。

相關內容