Eu estive olhando ao redor do sed
comando para adicionar texto em um arquivo em uma linha específica. Isso funciona adicionando texto após a linha 1:
sed '1 a\
Mas quero adicioná-lo antes da linha 1. Seria:
sed '0 a\
mas eu recebo este erro: invalid usage of line address 0
.
Alguma sugestão?
text-processing
command-line
sed
Manolo
fonte
fonte
Respostas:
Use
sed
ai
opção insert ( ) que irá inserir o texto na linha anterior.Pergunta author's update:
Para fazê-lo editar o arquivo no lugar - com o GNU
sed
- eu tive que adicionar a-i
opção:Também sintaxe
Para sed não GNU
Você precisa pressionar a tecla Enter imediatamente após a barra invertida
1i\
e depoisfirst_line_text
:Observe também que algumas
sed
implementações não-GNU (por exemplo, a do macOS) exigem um argumento para o-i
sinalizador (use-i ''
para obter o mesmo efeito que o GNUsed
).fonte
-i
opção. Atualizarei sua resposta antes de aceitar.sed '1 i\this text is entered above the existing first line' file
funciona para mim.sed (GNU sed) 4.2.2
apenassed '1 i text to insert' -i file
funcionou como um encanto. Obrigadoawk
resposta incorreta abaixo. Isso deve funcionar.Eco é usado para obter o texto. Nome do arquivo Cat - imprime o arquivo no console e o usa para enviar para outro arquivo filename1 e, em seguida, movemos o nome do arquivo1 para o nome do arquivo para inserir o texto na primeira linha do arquivo desejado.
fonte
Você pode usar o Vim no modo Ex:
1
selecione a primeira linhai
inserir texto e nova linhax
salvar e fecharfonte
Você deseja inserir texto antes da primeira linha, em vez de anexá- lo depois; portanto, use
Um documento aqui também pode ajudar:
fonte
Usando o GNU awk> = 4.1:
Ao contrário de todas as
sed
respostas, isso também funciona em arquivos vazios.fonte
inplace
é uma biblioteca e, infelizmente, aparece em todas as distribuições awk. Eu recebo "awk: fatal: não é possível abrir arquivo de origem 'inplace' para leitura"GNU Awk 4.2.1, API: 2.0 (GNU MPFR 4.0.1, GNU MP 6.1.2)
Se você não especificar a
-i
opção, ela não mostrará nenhum erro e exibirá a saída no terminal padrão, mas não inserirá o texto no arquivo.fonte
-i
troca.gnu sed
específicos e, por acaso,gnu sed
eles aceitarão ai
barra invertida). Se outros acham que isso merece uma resposta separada + um voto positivo ... tudo bem.O
0a
comando que tentou se trabalhar emex
, o antecessorvi
:O
printf
comando por si só gera:Os
0a
meios são acrescentados após a 0ª linha (ou seja, antes da primeira linha).A próxima linha ou várias linhas é um texto literal a ser adicionado.
O
.
em uma linha por si só termina o comando "acrescentar".As
x
causas Ex para salvar as alterações para o arquivo e saia.fonte
Estou surpreso que nesta pergunta antiga ninguém tenha mostrado o comando sed mais comum (e bastante simples nesse caso):
Que funciona na maioria das conchas e é portátil para várias versões sed.
Se o GNU sed estiver disponível, você poderá usar o seguinte:
A diferença é que o GNU sed permite o uso de a
\n
para uma nova linha e outros precisam de uma nova linha literal precedida por uma barra invertida (que também funciona no GNU sed de qualquer maneira).Se um shell que aceita a
$'…'
sintaxe estiver em uso, você poderá inserir a nova linha diretamente, para que o sed veja que a nova linha já está lá:O que funciona para versões mais sed.
fonte
Infelizmente, todas as respostas acima (principalmente com
sed
) não funcionaram para mim, pois todas substituíram a primeira linha. Eu estou em umaUbuntu 16.04 LTS
máquina. Aqui está minha solução alternativa comGNU Awk 4.0.2
:fonte
sed
resposta que usa substituição, mas não substitui a linha existente.Primeiro e último
Eu diria que qualquer um que tenha pesquisado como inserir / anexar texto ao início / fim de um arquivo provavelmente também precisará saber como fazer o outro.
Explicação
Isso é
cal
enviado para o gnu-sed
(chamadogsed
no macOS instalado via brew.sh ) com RegEx (-E
) estendido e 6 "scripts" aplicados (-e
) e as quebras de linha são escapadas\
para facilitar a leitura. Os scripts 1 e 2 usam1i\
"na linha 1, insira". Os scripts 5 e 6 costumam$a\
"na linha <último>, acrescentar". Alinhei verticalmente as saídas de texto para fazer o código representar o que é esperado no resultado. Os scripts 3 e 4 fazem substituições (o último se aplica somente à "linha <última>"). O resultado é a conversão da saída do comando para JSON válido.resultado
fonte
1i
para inserir texto antes da primeira linha. Alguém com essa pergunta precisaria extrair as partes necessárias da sua resposta para resolver o problema. As perguntas são gratuitas, por isso, convido você a fazer e responder sua própria pergunta para fornecer sua resposta específica.