Como adicionar hífens na primeira linha vazia de um arquivo de texto?

2

Estou tentando adicionar três hifens à primeira linha vazia de um determinado arquivo de texto e estou tentando usar sed para isso. Meu arquivo inicial (um arquivo MultiMarkdown) é parecido com isto:

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 ##

Entre linkcolor: black e ## Ch 1 ... ## , estou tentando acrescentar alguns traços ( --- ). Não tenho certeza de como fazer isso - o seguinte comando não me deu:

sed '/^$/a ---' Chapter1Rev4.md

Atualmente, o resultado é "comando a espera \ seguido por texto" e não sabe como adicionar a barra invertida ou como escapar dos hifens / traços.

    
por Jonathan 10.09.2015 / 20:07

4 respostas

3

{ sed -e/./b -es/$/---/\;q; cat; } <in >out

... não só substituirá a primeira linha vazia com três hipens, como também instruirá sed to q uit tentando ler o arquivo de entrada assim que a primeira linha vazia for encontrada e simplesmente cat o resto. Se você estiver usando o GNU sed , você vai querer usar a opção -u nbufferred.

    
por 11.09.2015 / 01:06
1

Tente

sed 's/^$/---/' Chapter1Rev4.md

para fazer isso em todas as linhas vazias. Para fazer isso no primeiro, eu usaria awk assim:

cat Chapter1Rev4.md | awk '{ if ($0 == "") { n++; if (n<2) print "---"; else print $0 } else print $0}'

(ou redireciona a saída para o novo arquivo com > newfile anexado).

    
por 10.09.2015 / 20:11
1

Outro sed :

sed -e '/^$/{
  s/$/---/
  t1
}' -e:1 -en\;b1 <file
    
por 11.09.2015 / 04:37
0

com a ficaria assim:

sed '0,/^$/{
/^$/a \
---    
}' yourfilename

ou, se você quiser substituir em vez de acrescentar:

sed '0,/^$/{s/^$/---/}' yourfilename

os scripts sed - para maior clareza

# from the first line through the first empty line
0,/^$/{
  # no \ needed here, just append it
  /^$/a ---
}

ou

# from the first line through the first empty line
0,/^$/{
   # replace empty lines with '---'
   s/^$/---/
}

isso funciona porque os endereços do bloco o limitam a um determinado intervalo (a primeira linha até a primeira linha nova vazia), somente na linha em que o bloco fecha é apenas o comando s/^$/---/ , consegue fazer qualquer coisa.

    
por 11.09.2015 / 04:15