Como cortar o final de um arquivo de texto após uma linha especificada

2

Eu tenho == Changelog == em um arquivo de texto e quero criar um novo arquivo onde essa linha e tudo depois dela será excluído.

Tenho certeza de que a resposta está aqui em algum lugar, tentei pesquisar, agora minha cabeça está girando. sed, awk, csplit, ... ?

    
por redanimalwar 15.03.2015 / 07:15

3 respostas

1

Eu usaria sed :

sed '/== Changelog ==/,$d' file > newfile

Esta sintaxe é menos eficiente do que a proposta acima por jasonwryan, mas é mais legível pela maioria das pessoas. Há dois usos famosos para o sed: a pesquisa básica e a substituição s/// e a ação baseada no intervalo /beginpattern/,/endpattern/X em que X é uma ação sed como d elete, s earch- replace ... Qualquer construção com um ponto-e-vírgula (;) é mais programática e menos compreendida.

    
por 18.03.2015 / 07:15
2

com o awk:

awk '/Changelog/{exit}1' file > newfile

ou com sed:

sed -n '/Changelog/q;p' file > newfile
    
por 15.03.2015 / 07:48
0
csplit -f newfile -n1 infile /==\ Changelog\ ==/ 

Isso criará ./newfile0 e ./newfile1 (com GNU csplit ou POSIXly ./newfile[12] ) . O primeiro conterá todas as linhas até a primeira linha ocorrente que corresponda a == Changelog == e a segunda conterá todas as linhas seguintes.

    
por 18.03.2015 / 09:31