빈 줄과 특정 문자열을 해당 문자열로 바꾸려면 어떻게 해야 합니까?

빈 줄과 특정 문자열을 해당 문자열로 바꾸려면 어떻게 해야 합니까?

sedor 또는 다른 것을 사용하여 빈 줄 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

관련 정보