여러 파일에서 패턴을 검색하고 모든 발생에서 하위 부분을 교체합니다.

여러 파일에서 패턴을 검색하고 모든 발생에서 하위 부분을 교체합니다.

LaTeX로 작성된 친구의 논문을 돕고 있는데 "검색 및 바꾸기"를 위한 빠른 솔루션이 필요합니다. Linux에서 터미널을 사용하면 다음 패턴을 어떻게 찾을 수 있습니까?

\caption{*\cite{*}}

그리고 \cite로 교체\protect\cite

나는 케이트를 사용하고 있었다. 검색 기능을 사용하여 처음에는 2000개 이상의 히트 항목을 찾았고, 검색을 구체화하여 약 300개의 히트 항목으로 범위를 좁혔습니다. 그러나 모두 교체하고 싶지 않기 때문에 범위를 더 좁힐 필요가 있습니다 \cite. \cite다음 기간 내에 발생하는 경우 에만 교체하고 싶습니다.\caption{}

답변1

캡션과 인용 텍스트에 특수 문자가 포함되어 있지 않다고 가정하면(특히 *예제의 첫 번째 문자는 포함되어서는 안 \되고 두 번째 문자 *에는 포함되어서는 안 됩니다 }) GNU sed 정규식

s:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g

제 생각엔 효과가 있을 것 같아요. 있을 수 있는 경우비어 있는+캡션 및/또는 인용 문자열 에 대한 수정자를 로 변경할 수 있습니다 *. 다음을 사용하여 파일을 수정하지 않고도 테스트할 수 있습니다.

sed -nr 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:gp' files

올바른 인스턴스를 찾아서 수정하는 것으로 보이면 옵션을 사용하여 그 자리에서 파일을 수정하도록 할 수 있습니다 -i. 아직 별도의 복사본을 작업하고 있지 않은 경우 자동으로 백업을 만들 수 있습니다.

sed -i.bak -r 's:(\\caption\{[^\]+)(\\cite\{[^}]+\}\}):\1\\protect\2:g' files

sed가 작동하지 않는 경우 Perl에서도 비슷한 표현이 가능합니다. 다른 버전의 sed도 작동하지만 특수 문자를 다르게 이스케이프해야 할 수도 있습니다.

관련 정보