Quero remover a primeira linha de vários arquivos de texto e substituí-la por outra linha. Existe uma maneira de fazer isso usando o terminal?
Eu sei como usar o vim, existe uma maneira de automatizá-lo com ele? Quero evitar fazê-lo manualmente (como na edição de cada arquivo individualmente).
Se possível, gostaria de evitar a instalação de novas bibliotecas (especialmente para algo assim que considero muito simples - mas posso estar errado).
Desde já, obrigado!
command-line
text-processing
TomTsagk
fonte
fonte
sed
é realmente o que eu estava procurando!Bem, usando-
vim
se:O que isso faz:
setline (n, text)
, bem, é uma função que define a linhan
comotext
.call
é necessário para chamar funções.bufdo
é usado para repetir um comando entre buffers (sem um intervalo, ele atua em todos os buffers).wq
salva e fecha o buffer. Precisamos fazer isso antes de passar para o próximo buffer, para que este comando seja encadeado aocall
comando usando|
.-c cmd
execuçõescmd
é um comando no modo de comando após carregar o primeiro buffer.Nes
ativa modo silencioso não compatível, ex-modo, o que é melhor para processamento não interativo.Benefícios:
setline
conteúdo do texto pode ser qualquer coisa - um&
em umsed
texto de substituição pode ter efeitos indesejados.fonte
sed
parece muito mais fácil de usar, mas é realmente incrível quevim
pode fazer o mesmo! Muito obrigado pela sua resposta!bufdo
). Considere que você já possui os arquivos abertos e ... E para mostrar uma alternativa para1s/foo/bar/
.Algumas outras opções:
awk
(precisa de uma versão relativamente nova do GNUawk
)Perl / shell
Shell / coreutils
fonte
Esse script fará o que você solicitou, colocando os arquivos alterados em um novo diretório sem realmente alterar os originais.
fonte
Usando
gawk
Exemplo
fonte
jEdit: Eu o uso para encontrar e substituir em massa. É poderoso com a capacidade de usar RegEx - Expressões regulares. Você pode operar em arquivos dentro de um diretório, especificar extensões, por exemplo, ".html" e assim por diante. E, você pode olhar para a localidade da mudança de candidato no contexto, em uma GUI. O jEdit é ótimo.
O jEdit está disponível no centro de software do Ubuntu.
fonte
Os comandos tail e cat fariam isso facilmente:
Envolva-os em um loop adequado e talvez use um arquivo temporário adequado e correto, em vez de um nome de arquivo temporário codificado. Acredito que o bash e outros shells têm uma sintaxe para criar arquivos temporários.
A opção -n da cauda tem duas interpretações, dependendo se o argumento tem um sinal de mais. Se tiver um sinal de mais, significa mostrar a cauda do arquivo começando no número da linha fornecida. Caso contrário, o número é o número de linhas, incluindo a última linha, que a cauda deve produzir.
fonte