Está substituindo uma linha particular em um arquivo através de um script bash possível em VIM ou EX?

2

Eu gostaria de modificar uma linha em particular, digamos a linha 5, em um arquivo usando a construção EOEX Como posso alcançar meu objetivo? O trecho de código que uso para alcançar meu objetivo é o seguinte:

#!/bin/bash
S=0.030
F=0.150
N=30
DIFF='echo "scale=3; $F - $S" | bc -l'
dw='echo "scale=3; $DIFF / $N" | bc -l'
is='echo "scale=3; $S / $dw" | bc -l'
if='echo "scale=3; $F / $dw" | bc -l'
ex ~/Desktop/Dropbox/MATLAB/FFT.m  <<EOEX
  :5s/for*/for i = $S:$dw:$F/g
  :x
EOEX

Eu fiz algumas pesquisas e aprendi que geralmente EOF (fim de arquivo) é usado em here scripts para I/O de redirecionamento para a entrada padrão de um comando em particular (no meu caso é ex ). Também aprendi que, desde que as palavras-chave de início e término sejam as mesmas, qualquer palavra pode ser usada em vez do EOF . Meu problema é que, em vez do efeito desejado, que está substituindo a linha por outro for loop initializer em Matlab , esse script não exclui a linha e anexa a sequência no final da quinta linha. Para fins de referência, também adicionei meu arquivo FFT.m. Peço desculpas pelo inconveniente causado pela abstração da minha pergunta anteriormente. Observe que também estou aberto a usar outro programa para obter o efeito desejado, mas estou curioso sobre por que ele não pode ser alcançado em ex ou vim . Por favor, clique aqui para o script Matlab.

    
por Vesnog 24.12.2014 / 12:15

1 resposta

6

Para alterar a linha 5 de um arquivo chamado test_file para 'hello world' usando ex e o EOEX construct (pelo qual presumo que o que você quer dizer é um 'aqui documento'):

ex test_file << EOEX
5c
hello world
.
wq
EOEX

O acima também é possível com ed , embora note que POSIX ed não suporta o comando wq . Em vez disso, coloque o w e q em linhas separadas.

Usar sed (uma versão que suporta a opção -i ) é um pouco mais simples:

sed -i '15 c hello world' test_file
    
por 24.12.2014 / 13:30

Tags