sed
or 또는 다른 것을 사용하여 빈 줄 awk
뒤에 특정 문자열(예: or )이 오는 것을 해당 문자열(따라서 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은 뒤에 하나 이상의 공백(줄 바꿈 포함)이 없는 줄의 시작, 다른 줄의 시작, 또는 내부를 &
찾습니다 \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