Como usar o comando sed para editar o rcfile do nano (cores dos elementos da interface)

3

Aqui está uma amostra do meu arquivo nanorc :

(...)
## Detect word boundaries differently by treating punctuation
## characters as parts of words.
# set wordbounds

## The characters (besides alphanumeric ones) that should be considered
## as parts of words.  This option does not have a default value.  When
## set, it overrides option 'set wordbounds'.
# set wordchars "<_>."


## Paint the interface elements of nano.  These are examples;
## by default there are no colors, except for errorcolor.
# set titlecolor brightwhite,blue
# set statuscolor brightwhite,green
# set errorcolor brightwhite,red
# set selectedcolor brightwhite,magenta
# set numbercolor cyan
# set keycolor cyan
# set functioncolor green
## In root's .nanorc you might want to use:
# set titlecolor brightwhite,magenta
# set statuscolor brightwhite,magenta
# set errorcolor brightwhite,red
# set selectedcolor brightwhite,cyan
# set numbercolor magenta
# set keycolor brightmagenta
# set functioncolor magenta


## Setup of syntax coloring.
##
## Format:
##
## syntax "short description" ["filename regex" ...]
(...)

Eu preciso alterar o bloco ## Paint the interface elements of nano. para isso:

## Paint the interface elements of nano.  These are examples;
## by default there are no colors, except for errorcolor.
set titlecolor brightwhite,blue
set statuscolor brightwhite,green
set errorcolor brightwhite,red
set selectedcolor brightwhite,magenta
set numbercolor cyan
set keycolor cyan
set functioncolor green

Em outras palavras, remova o comentário do primeiro bloco de cores e exclua o segundo bloco de cores (que é recomendado apenas para .nanorc da raiz).

Como posso conseguir isso com o comando sed? Se vários comandos sed (em vez de grandes) simplificarem e facilitarem a leitura, prefiro isso.

    
por Ricardo Amaral 14.04.2018 / 11:01

1 resposta

4

Tente:

sed "/## Paint the interface elements of nano./,/^$/ \
     {s/^# //; /## In root's .nanorc you might want to use:/,/^$/d}" infile

Isso procurará as linhas entre ## Paint the interface elements of nano. e primeira linha vazia, em seguida, Descomente essas linhas se começar com hash-space # e exclua tudo o mais entre a linha inicial com ## In root's .nanorc you might want to use: até uma linha em branco no mesmo block found at first, Usamos {...} para aplicar esse sed-script somente o bloco que precisamos, e sed imprimirá toda linha else se não combinar com a condição que é sed ação padrão.

    
por 14.04.2018 / 11:31