문자열의 짝수 및 홀수 반복을 다른 문자열로 대체

문자열의 짝수 및 홀수 반복을 다른 문자열로 대체

이 작업을 수행할 수 있는 방법이 있다는 것을 알고 있지만 sed제대로 작동하도록 할 수는 없습니다. 을 사용하는 코드가 포함된 Latex 파일이 있습니다 $. 이를 MathJax로 변환하고 싶습니다. 이를 위해서는 a 의 홀수 인스턴스 와 a 의 짝수 인스턴스 만 $교체 하면 됩니다 . 그래서\($\)

Here is Einstein's equation $E=mc^2$ and here is Newton's law $F=ma$

되어야 한다

Here is Einstein's equation \(E=mc^2\) and here is Newton's law \(F=ma\)

연속적으로 나타나는 항목은 $같은 줄에 있지만 여러 줄이 있을 수도 있습니다. 파일 전체에서 교체가 이루어지기를 원합니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변1

GNU 사용 sed:

sed -Ez 's/\$([^$]*)\$/\\(\1\\)/g'

또한 아니요 -E:

sed -z 's/\$\([^$]*\)\$/\\(\1\\)/g'

이로 -z인해 GNU는 sed전체 입력을 한 줄로 처리합니다. 이는 표준 기능의 확장입니다 sed.

답변2

$다음 각 단어 경계를 로 바꾸고 \(다음 $각 단어 경계를 다음으로 바꿉니다 \).

sed -e 's/\$\</\\(/g' -e 's/\>\$/\\)/g' file

GNU 사용자는 및 단어 경계로 sed사용할 수 있지만 대체도 가능합니다 . BSD 사용자는 표시된 대로 및를 사용할 수 있지만 원할 경우 및 또한 사용할 수 있습니다 (macOS 사용자 및\<\>\b\<\>[[:<:]][[:>:]]기본 sed[[:<:]]및 )을 사용해야 합니다 [[:>:]].

관련 정보