"울타리" 텍스트 블록을 Linux(특히 make 파일)의 tree 명령 출력으로 바꾸려고 합니다. 이것은 내 입력 파일입니다.
some text...
[fencetitle]
----
.
├── file1.txt
└── test
└── file2.txt
1 directory, 2 files
----
some more text...
tree
내용을 명령의 출력으로 바꾸고 싶습니다 .
some text...
[fencetitle]
----
.
├── file1.txt
├── newfile.txt
└── test
└── file2.txt
1 directory, 3 files
----
some more text...
[fencedtitle]
sed 명령을 사용하면 개행 문자를 line 및 to와 ----
일치시킬 수 없는 것 같습니다 ----
. 그러나 다음을 [fencedtitle]
사용하여 중간에 텍스트를 바꿀 수 있습니다.----
sed -n '/\[fencedtitle\]/{:a;N;/----/!ba;N;s/.*\n/REPLACEMENT\n/};p' file
하지만 REPLACMENT를 tree 명령의 출력으로 바꿀 수는 없는 것 같습니다. 이것이 sed
올바른 접근 방식입니까, 아니면 더 적절한 또 다른 접근 방식이 있습니까?
답변1
다음과 같이 시도해 볼 수 있습니다.
sed -n "/\[fencedtitle\]/{:a;N;/----/!ba;N;s/.*\n/$(tree)\n/};p" file
그러나 출력에 tree
정규식에 고유한 문자가 포함되어 있으면 문제가 발생할 수 있습니다. 출력을 tree
파일에 저장하는 경우:
tree > my-out
그러면 큰 문제 없이 sed에서 읽을 수 있습니다.
sed -n '/\[fencetitle\]/{p;n;p;r my-out
:a;n;/^----$/!ba};p' file
(예, r
명령 뒤에 개행 문자가 필요합니다. 같은 줄에 어떤 명령도 뒤에 올 수 없습니다.)
펜스의 시작 부분 만 p;n;p;
인쇄한 다음 파일을 읽은 다음 펜스 끝까지 모든 것을 건너뜁니다.
r
나머지 부분을 별도의 sed 표현식으로 분할하여 명령 다음에 줄을 끝낼 수 있습니다 .
sed -ne '/\[fencetitle\]/{p;n;p;r my-out' -e ':a;n;/^----$/!ba};p' file
답변2
아래 방법에 따라 위의 예제를 완성했습니다.
sed "s/file1.txt/&\n|__newfile/g" example.txt
산출
some text...
[fencetitle]
----
.
├── file1.txt
|__newfile
└── test
└── file2.txt