Até agora, consegui descobrir como adicionar uma linha no início de um arquivo, mas não é exatamente isso que desejo. Mostrarei em um exemplo
Conteúdo do arquivo
some text at the beginning
Resultado
<added text> some text at the beginning
É semelhante, mas não quero criar nenhuma nova linha com ela ...
Eu gostaria de fazer isso com sed
se possível.
sed
.Respostas:
sed
pode operar em um endereço:O que é isso mágico que
1s
você vê em todas as respostas aqui? Endereçamento de linha! .Deseja adicionar
<added text>
as 10 primeiras linhas?Ou você pode usar
Command Grouping
:fonte
Se você deseja adicionar uma linha no início de um arquivo, é necessário adicionar
\n
no final da string a melhor solução acima.A melhor solução adicionará a string, mas com a string, ela não adicionará uma linha no final de um arquivo.
fonte
Se o arquivo tiver apenas uma linha, você poderá usar:
Se for mais de uma linha. um de:
Eu incluí o último para que você saiba como fazer intervalos de linhas. Ambos "substituem" o marcador da linha inicial nas linhas afetadas pelo texto que você deseja inserir. Você também pode (supondo que você
sed
seja moderno o suficiente) usar:para editar no local.
fonte
Você pode usar
cat -
fonte
echo
adição de uma nova linha?> file
ao comando, ele jus spam meu terminal com"some text at the beginning"
printf '%s' "some text" | cat - filename > tmpfile && mv tmpfile filename
Para inserir apenas uma nova linha:
fonte
Usar subshell:
fonte
Observe que, no OS X
sed -i <pattern> file
,, falha. No entanto, se você fornecer uma extensão de backupsed -i old <pattern> file
, elefile
será modificado no local enquantofile.old
é criado. Você pode excluirfile.old
no seu script.fonte
PROBLEMA: marque um arquivo, na parte superior do arquivo, com o nome base do diretório pai.
Ou seja, para
marque a parte superior
file1
comProgramming
.SOLUÇÃO 1 - arquivos não vazios:
1s
coloca o texto na linha 1 do arquivo.SOLUÇÃO 2 - arquivos vazios ou não vazios:
O
sed
comando acima falha em arquivos vazios. Aqui está uma solução, com base em /superuser/246837/how-do-i-adad-text-to-the-beginning-of-a-file-in-bash/246841#246841Observe que o
-
comando in no cat é necessário (lê a entrada padrão: consulteman cat
para obter mais informações). Aqui, acredito, é necessário pegar a saída da instrução printf (para STDIN) e colocar isso e o arquivo em temp ... Veja também a explicação na parte inferior de http://www.linfo.org/cat .html .Também adicionei
-f
aomv
comando, para evitar solicitações de confirmação ao substituir arquivos.Para recursar em um diretório:
Observe também que isso quebrará caminhos com espaços; existem soluções em outros lugares (por exemplo, globbing de arquivos ou
find . -type f ...
soluções de tipo) para elas.ADENDO: Re: meu último comentário, este script permitirá que você repasse sobre diretórios com espaços nos caminhos:
fonte
Olá com retorno de carro:
fonte
Para adicionar uma linha na parte superior do arquivo:
fonte
Existe uma maneira muito fácil:
fonte
Apenas por diversão, aqui está uma solução
ed
que não tem o problema de não funcionar em um arquivo vazio. Você pode colocá-lo em um script de shell como qualquer outra resposta a esta pergunta.O script acima adiciona o texto a ser inserido na primeira linha e, em seguida, une a primeira e a segunda linha. Para evitar a saída por erro com uma associação inválida, ele primeiro cria uma linha em branco no final do arquivo e a remove mais tarde, se ainda existir.
Limitações: Este script não funciona se
<added text>
for exatamente igual a um único período.fonte
meus dois centavos:
Isso funcionará mesmo se a string contiver barra
"/"
fonte
A primeira
tac
canaliza o arquivo para trás (última linha primeiro), para que o "texto a inserir" apareça por último. O segundo otac
envolve novamente para que a linha inserida esteja no início e o arquivo original esteja em sua ordem original.fonte
Outra solução com aliases. Adicione ao seu arquivo init rc / env:
Uso:
fonte