주어진 텍스트 파일의 첫 번째 빈 줄에 세 개의 하이픈을 추가하려고 하며 이를 sed
이 목적으로 사용하려고 합니다. 내 초기 파일(MultiMarkdown 파일)은 다음과 같습니다.
title: "Ch. 1: Unparticipated Causality"
author: Jonathan Greig
biblio-files: bibliography.bib
biblio-style: chicago-authordate
mainfont: Linux Libertine O
linestretch: 1.5
documentclass: article
geometry: margin=1in
citecolor: black
linkcolor: black
## Ch 1: Unparticipated Causality ##
linkcolor: black
와 사이에 ## Ch 1 ... ##
대시( )를 추가해 보았습니다 ---
. 이 작업을 수행하는 방법을 잘 모르겠습니다. 다음 명령은 아직 작동하지 않습니다.
sed '/^$/a ---' Chapter1Rev4.md
현재 결과는 "명령어는 \ 다음에 텍스트가 옵니다"이며 백슬래시를 추가하는 방법이나 하이픈/대시를 이스케이프하는 방법을 잘 모르겠습니다.
답변1
{ sed -e/./b -es/$/---/\;q; cat; } <in >out
...첫 번째 빈 줄을 세 개의 하이픈으로 바꿀 뿐만 아니라 첫 번째 빈 줄과 나머지 빈 줄을 찾는 즉시 입력 파일을 읽으라고 sed
uit에 지시합니다 . 그러나 GNU를 사용하는 경우 nbufferred 스위치를 사용해야 합니다 .q
cat
sed
-u
답변2
노력하다
sed 's/^$/---/' Chapter1Rev4.md
모든 빈 줄에 대해 이 작업을 수행합니다. 먼저 awk
다음과 같이 사용하겠습니다.
cat Chapter1Rev4.md | awk '{ if ($0 == "") { n++; if (n<2) print "---"; else print $0 } else print $0}'
(또는 출력을 첨부된 새 파일로 리디렉션 > newfile
)
답변3
다른 sed
:
sed -e '/^$/{
s/$/---/
t1
}' -e:1 -en\;b1 <file
답변4
그리고 a
다음과 같습니다.
sed '0,/^$/{
/^$/a \
---
}' yourfilename
또는 추가 대신 교체하려는 경우:
sed '0,/^$/{s/^$/---/}' yourfilename
sed 스크립트 - 명확성을 위해
# from the first line through the first empty line
0,/^$/{
# no \ needed here, just append it
/^$/a ---
}
또는
# from the first line through the first empty line
0,/^$/{
# replace empty lines with `---'
s/^$/---/
}
이는 블록의 주소가 이를 특정 범위(첫 번째 줄부터 첫 번째 빈 줄 바꿈까지)로 제한하고 블록이 닫힌 줄에서만 s/^$/---/
무엇이든 할 수 있기 때문에 작동합니다.