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

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

나는 sed이것을 수행하는 방법이라는 것을 알고 있지만 작동시킬 수는 없습니다. 로 강조 표시된 수학 표현식이 포함된 라텍스 파일이 있습니다 $. 이것을 MathJax 코드로 변환하고 싶습니다. 이를 위해서는 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'

이는 GNU가 전체 입력을 한 줄로 후루룩거리게 -z만듭니다 . sed이는 표준 기능의 확장입니다 sed.

답변2

$단어 경계 바로 앞에 오는 각 항목을 로 바꾸고 \(, $단어 경계 바로 뒤에 오는 각 항목을 다음으로 바꿉니다 \).

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

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

관련 정보