현재 자주 사용하는 기본 LaTeX 패키지 세트가 다음과 같은 형식으로 있습니다.
package1
[options]package2
[options]package3
package4
...
패키지에 추가 옵션이 있는지 여부에 따라 이를 \usepackage[options]{package} 또는 \usepackage{package}의 표준 LaTeX 표기법으로 변환할 수 있기를 원합니다. 옵션이 있는 줄을 변환하기 위해 sed/regex 명령을 성공적으로 만들었지만 옵션이 없는 패키지가 누락되었습니다.
echo "[option]package" | sed 's/.*\(\[[^]]*\]\)\(.*\)/\\usepackage\1{\2}/'
>> \usepackage[option]{package}
패키지가 하나만 있는 라인에서 실행하면 예상대로 실패합니다.
echo "package" | sed 's/.*\(\[[^]]*\]\)\(.*\)/\\usepackage\1{\2}/'
>> package
정규식 문제입니까? 그렇다면 어떻게 처리해야 합니까?
답변1
이것이 귀하에게 적합한지 확인하십시오:
$ echo -e "[options]package3\npackage4" | sed 's/^\(\[[^]]*\]\)\?\(.*\)/\\usepackage\1{\2}/'
\usepackage[options]{package3}
\usepackage{package4}
줄의 시작 부분과 일치 .*
하도록 교체 하고 대괄호를 선택 사항으로 만들기 위해 추가했습니다.^
\?
답변2
이 2단계 접근 방식은 더 간단해 보입니다.
$ printf '%s\n' 'package1' '[options]package2' | sed -e 's/[^]]*$/{&}/' -e 's/^/\\usepackage/'
\usepackage{package1}
\usepackage[options]{package2}
- 첫 번째 단계 는 줄 끝까지 를
s/[^]]*$/{&}/
제외하고 가능한 가장 긴 문자열을 일치시켜]
프로젝트 이름을 중괄호 안에 넣는 것입니다 . - 두 번째 단계 에서는 줄의 시작 부분에
s/^/\\usepackage/
추가하기만 하면 됩니다 .\usepackage