텍스트 파일의 첫 번째 빈 줄에 하이픈을 추가하는 방법은 무엇입니까?

텍스트 파일의 첫 번째 빈 줄에 하이픈을 추가하는 방법은 무엇입니까?

주어진 텍스트 파일의 첫 번째 빈 줄에 세 개의 하이픈을 추가하려고 하며 이를 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

...첫 번째 빈 줄을 세 개의 하이픈으로 바꿀 뿐만 아니라 첫 번째 빈 줄과 나머지 빈 줄을 찾는 즉시 입력 파일을 읽으라고 seduit에 지시합니다 . 그러나 GNU를 사용하는 경우 nbufferred 스위치를 사용해야 합니다 .qcatsed-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/^$/---/무엇이든 할 수 있기 때문에 작동합니다.

관련 정보