Digamos que eu tenha um bloco de texto no ~/.bashrc
:
#~/.bashrc
# ...some commands...
# aliases
alias suicide='sudo rm -rf /'
# end aliases
# other commands
Desejo substituir esse bloco de texto por outro texto contido entre dois marcadores em outro arquivo: stuff-to-place-in-bashrc.txt
# stuff-to-place-in-bashrc.txt
# ...stuff...
# aliases
alias ldir='ls * -d'
alias ithinklifeisworthliving='echo all good'
# end aliases
# ...more stuff...
eu tentei
sed -ne 's/# aliases\s+\(.*\)\s+# end aliases/\1/' stuff-to-place-in-bashrc.txt
Mas eu estou realmente balançando no escuro aqui. Alguém poderia me ajudar?
Como extraio o texto do
stuff-to-place-in-bashrc.txt
?Como substituo a outra seção
~/.bashrc
pelo texto extraído da pergunta 1?
Editar
Obrigado pelas atualizações pessoal, aqueles querendo saber por que eu iria querer algo como isto:
permite atualizações escolhidas a dedo em arquivos de script sem substituir as adições feitas pelo usuário. útil para ambientes operacionais padrão compartilhados e atualizados com freqüência (como meu último trabalho na Tyro que codificou com XP).
enlouqueçam.
fonte
# aliases
e# end aliases
), e isso pode funcionar para você.Respostas:
Ed é o editor padrão, porque você pode usá-lo para desenvolver scripts de edição e deixar que ele funcione, como você testou anteriormente, de forma interativa. Para arquivos pequenos como
.bashrc
ou qualquer texto de código, ed é de alto desempenho porque lê o arquivo inteiro de uma só vez e trabalha com o buffer. Pelo mesmo motivo, você não deve usar ed para arquivos grandes, como arquivos de log.Mas com um script ed, seu trabalho é feito rapidamente:
Uso scripts semelhantes para ajustar automaticamente os arquivos de configuração, como também .asoundrc em diferentes ambientes para os quais levo meu laptop.
O melhor documento sobre ed vem como uma simples página de manual do muito legal sistema PLAN9 . Traduzi -o para um documento postscript ed.ps. Se você estiver interessado no PLAN9 , verifique o 9front e o http://cat-v.org/, pois a versão original do bell labs ainda é mantida, mas possui um sistema de arquivos muito simples.
Uma palavra final sobre editor wars, emacs, vim e similares: regras acme!
fonte
w
,q
)/^# aliases
, e/^# end aliases/
), e os outros comandos são Vi / Ed. Consulte, por exemplo, vimhelp.appspot.com/cmdline.txt.html#%3Arange for+, /^# end aliases/
.info Ed
no seu sistema (espero). Não sei por que as distribuições modernas de linux não instalam este editor legal. weq são comandos de gravação e saída. E ed funciona muito semelhante ao sed com expressões regulares. Há uma razão pela qual os nomes soam assim. d significa excluir as linhas endereçadas, -r lê na linha anterior os resultados do!
comando a seguir. Eu reduzo os nomes dos arquivos na edição, pois estou com preguiça de digitar esta manhã.Se você deseja editar o arquivo no local,
ed
é uma solução muito boa. Se você deseja editá-lo in-stream, usesed
. Evitesed -i
.fonte
Claro, você pode fazer isso
ed
sozinho, sem a necessidade de ferramentas adicionais:se você estiver satisfeito com o resultado, substitua
,p
porw /home/username/.bashrc
para escrever as alterações em~/.bashrc
(observe o caminho completo usado comr
ew
; você pode simplesmente usá-.bashrc
lo se estiver dentrocwd
).Como isso funciona: primeiro
d
excluímos as linhas desnecessáriasstuff_to_place.txt
. Em seguida, excluímos os restantes (os aliases) com,d
. O buffer de texto agora está vazio enquanto o buffer de corte contém as linhas que queremos. Em seguida,r
ead o conteúdo.bashrc
para o buffer de texto, coloque o conteúdo do buffer de corte (x
) para depois da/# aliases/
linha, duplicar a última linha que foi colado (.t.
), em seguida, apagar a partir da linha duplicada até, mas não incluindo/# end aliases/
e, finalmente,p
rint ouw
rito mudanças eq
uit.fonte