使用sed
or或其他什麼,如何用該字串(因此or )awk
替換後面接著特定字串(例如&
or )的空白行?\end{align}
&
\end{align}
作為範例,這是初始文件(編輯:不太模糊的例子):
The quick brown fox jumps over the sleazy dog.
Indeed, the quick brown fox jumps over the sleazy dog.
\begin{align}
& foo
& bar
\end{align}
The quick brown fox jumps over the sleazy dog.
Indeed, the quick brown fox jumps over the sleazy dog.
這就是我想要得到的:
The quick brown fox jumps over the sleazy dog.
Indeed, the quick brown fox jumps over the sleazy dog.
\begin{align}
& foo
& bar
\end{align}
The quick brown fox jumps over the sleazy dog.
Indeed, the quick brown fox jumps over the sleazy dog.
答案1
GNU sed
具有擴展正則表達式支援(-E)以幫助正規表示式編寫。
sed -Ei -e '
/./b
:a
$q;N
/\n$/ba
s/^\n+(&|\\(begin|end)\{align\})/\1/
' file
想法是開始收集空行,並在看到非空白行時停止。然後正規表示式將檢查空白行塊後面是否跟隨以下三行之一:
- 以 & 符號開頭的行
&
- 以 \begin{align} 開頭的行
- 以 \end{align} 開頭的行
然後我們刪除這些特定的空白行。
答案2
在多行模式下pcregrep
:
pcregrep -M '^(?!\s+^(&|\Q\end{align}\E))' < file
grep 找出後面沒有一個或多個空格(包括換行符號)的行的開頭、另一行的開頭以及 wither&
或\end{align}
.
或與perl
:
perl -0777 -pe 's/^\s+^(&|\Q\end{align}\E)/$1/gm' < file
答案3
這刪除了全部對齊區塊中的空白行:
sed '/\\begin/,/\\end/ { /^$/d; }' file
我的 Mac 上的 BSD sed 需要分號,但 GNU sed 不需要。
匹配特定的區塊類型比較棘手。最直接的方法是
sed '
/\\begin{align}/,/\\end{align}/ { /^$/d; }
/\\begin{equation}/,/\\end{equation}/ { /^$/d; }
' file