sed
파일을 스캔하여 패턴을 찾은 다음 일치하는 패턴의 일부를 파일 이름으로 사용하고 파일 내용을 해당 위치에 삽입하려고 합니다 . 대부분의 작업을 수행할 수 있지만 파일 이름 대신 역참조를 사용하는 방법을 알 수 없는 것 같습니다.
간단히 말해서, 라텍스 파일은 전처리되어야 하고 모든 최상위 \input
명령은 제거되어야 합니다. 왜냐하면 이것은 lilypond-book
Stupid™이기 때문입니다.
# Setup files for example
$ echo "foo\n\\input{file2}\nfoo" > file1
$ echo "bar\nbar" > file2
# Use sed to find and replace latex \input commands
$ sed $'/^\\\\input{\\(.*\\)}$/ {r file2\n d}' file1
foo
bar
bar
foo
지금까지는 괜찮았지만 하드코딩된 파일 이름이 있으므로 위 그룹 일치 결과( {
및 }
구분 기호 사이의 부분)를 파일 이름으로 사용해야 합니다. 불행히도 이것은 작동하지 않습니다.
$ sed $'/^\\\\input{\\(.*\\)}$/ {r \\1\n d}' file1
foo
foo
이러한 시나리오에서 일치하는 패턴을 파일 이름으로 사용하는 방법은 무엇입니까?
답변1
GNU를 사용하면 sed
다음과 같은 작업을 수행할 수 있습니다.
sed '/^\\input{\(.*\)}$/{s//\1/;s/'\''/&\\&&/g;s/.*/cat<'"'&'/e}"
(즉, cat<'the-file'
명령을 작성하고(필요한 경우 파일 이름에 따옴표를 이스케이프 처리함) e
명령의 플래그 s
(GNU 전용)를 사용하여 명령을 평가합니다.