Oi eu quero prefixar o texto em um arquivo. Por exemplo, quero adicionar tarefas ao início de um arquivo todo.txt. Estou ciente echo 'task goes here' >> todo.txt
mas isso adiciona a linha ao final do arquivo (não o que eu quero).
245
Respostas:
ou
ou
fonte
|
) a mensagem (echo '...'
) paracat
que usa-
(entrada padrão) como o primeiro arquivo etodo.txt
como o segundo.cat
CONCATENA vários arquivos. Envie a saída (>
) para um arquivo chamadotemp
. Se não houver erros (&&
) decat
depois renomeiemv
) atemp
arquivo de volta para o arquivo original (todo.txt
).1
significa fazer o próximo comando apenas na linha um do arquivo e oi
comando é inserir. Procure na página man sob a seção "Addresses" e na seção "Zero-or One-address commands".sed
comando é algo como isto (inserindo uma guia principal):'1i\tSome Text'
, você pode precisar dobrar a barra invertida. Caso contrário, seu dialeto desed
pode não reconhecer\t
como guia.Uma opção mais simples na minha opinião é:
Isso funciona porque o comando dentro de
$(...)
é executado antestodo.txt
é sobrescrito com> todo.txt
Enquanto as outras respostas funcionam bem, acho isso muito mais fácil de lembrar, porque eu uso eco e gato todos os dias.
EDITAR: Esta solução é uma péssima ideia se houver alguma barra invertida
todo.txt
porque graças ao-e
O eco da bandeira irá interpretá-los. Outra maneira muito mais fácil de obter novas linhas na string de prefácio é ...... simplesmente para usar novas linhas. Claro, não é mais uma linha única, mas realisticamente também não era uma linha direta. Se você estiver fazendo isso dentro de um script e estiver preocupado com o recuo (por exemplo, se estiver executando isso dentro de uma função), há algumas soluções alternativas para que isso ainda se ajuste bem, incluindo, mas não se limitando a:
Além disso, se você se importa se uma nova linha é adicionada ao final de
todo.txt
, não use isso. Bem, exceto o penúltimo. Isso não atrapalha no final.fonte
-e
também converter seqüências de escape dentro todo.txt?o
moreutils
tem uma boa ferramenta chamadasponge
:Ele "absorverá" STDIN e, em seguida, gravará no arquivo, o que significa que você não precisa se preocupar com arquivos temporários e movê-los.
Você pode ter
moreutils
com muitas distribuições do Linux,apt-get install moreutils
, ou no OS X usando Homebrew combrew install moreutils
.fonte
(echo 'ble'; cat todo.txt)
:-)Você pode usar o Vim no modo Ex:
1
selecione a primeira linhai
inserirx
salvar e fecharfonte
Você pode criar um novo arquivo temporário.
Você também pode usar
sed
ouawk
. Mas basicamente a mesma coisa acontece.fonte
new_todo.txt
fica escrito apenas parcialmente. Sua solução parece perder o arquivo original.rm
do arquivo original.Se o arquivo de texto for pequeno o suficiente para caber na memória, você não precisará criar um arquivo temporário para substituí-lo. Você pode carregar tudo na memória e escrevê-lo de volta no arquivo.
É impossível adicionar linhas ao início do arquivo sem gravar o arquivo inteiro.
fonte
text=$(cat file)
. Tenha cuidado para usar apenas o texto, porque as variáveis do shell não são binárias mywiki.wooledge.org/BashFAQ/058Você não pode inserir conteúdo no início de um arquivo. A única coisa que você pode fazer é substituir o conteúdo existente ou anexar bytes após o término atual do arquivo.
Qualquer solução para sua pergunta, então, requer que um arquivo temporário (ou buffer) seja criado (na memória ou no disco), o que acabará substituindo o arquivo original.
Cuidado para não perder dados preservando o arquivo original enquanto cria o novo, caso o sistema de arquivos esteja cheio durante o processo. por exemplo:
fonte
echo HOME=\"/g/Users/timregan/\" | cat - 'F:\Program Files\Git\etc\profile'
funciona mascat <echo HOME=\"/g/Users/timregan/\" 'F:\Program Files\Git\etc\profile'
dá o erro "echo: Nenhum tal arquivo ou diretório"<
e a(
iria quebrar a sintaxe. Experimentarcat <(echo HOME=\"/g/Users/timregan/\") 'F:\Program Files\Git\etc\profile'
Você pode usar
tee
:fonte
Git Bash + Windows10 + Multilinha :
Aqui está uma versão que permite usar seqüências de várias linhas .
fonte