또는 무엇이든 빈 줄 뒤에 특정 문자열(예: or )을 이 문자열(따라서 or )로 바꾸는 방법은 무엇 sed
입니까 ?awk
&
\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
하나 이상의 공백(개행 포함)이 뒤따르지 않는 줄의 시작, 다른 줄의 시작 및 위더 &
또는 \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