O que sed -i '1d' faz?

28

Eu entendo que sedé um comando para manipular arquivos de texto.

No meu Google, parece que -isignifica executar a operação no próprio arquivo, isso está correto?

Que tal '1d'?

Jérôme Verstrynge
fonte

Respostas:

43

Em sed:

  • -i A opção editará o arquivo de entrada no local

  • '1d' irá remover a primeira linha do arquivo de entrada

Exemplo:

% cat file.txt 
foo
bar

% sed -i '1d' file.txt 

% cat file.txt        
bar

Observe que, na maioria das vezes, é uma boa idéia fazer um backup enquanto usa a -iopção para que você faça backup do arquivo original em caso de alteração inesperada.

Por exemplo, se você fizer:

sed -i.orig '1d' file.txt 

o arquivo original será mantido como file.txt.orige o arquivo modificado file.txt.

heemail
fonte
4
Você também pode fazer uma "execução a seco" sem -iver o que acontece primeiro e depois usar -ipara alterar o arquivo.
Baard Kopperud
15

1. a)

sed '1d' file.txt

Imprime o conteúdo de file.txt; excluindo a primeira linha; para a saída padrão.


2. a)

sed -i    '1d' file.txt # GNU, NetBSD, OpenBSD
sed -i '' '1d' file.txt # FreeBSD, macOS

Imprime o conteúdo de file.txt; excluindo a primeira linha; de volta para file.txt; substituindo o original.


2. b)

sed -i.back '1d' file.txt

Cria um backup do original (as file.txt.back), antes de fazer alterações. Exceto no FreeBSD sed, o sufixo (aqui .back) deve ser anexado à -iopção (no mesmo argumento, sem espaço entre -ie .back).


3. a)

sed '2d' file.txt

Imprime o conteúdo de file.txt; excluindo a segunda linha; para a saída padrão.
(Especificar qualquer número removerá a linha correspondente).

Também compatível com a -ibandeira.


3. b)

sed '1!d' file.txt

Imprime o conteúdo de file.txt; excluindo tudo, exceto a primeira linha; para a saída padrão.
(Em outras palavras, somente a primeira linha é impressa).

Também compatível com a -ibandeira.


3. c)

sed '$d' file.txt

Imprime o conteúdo de file.txt; excluindo a última linha; para a saída padrão.

Também compatível com a -ibandeira.

vozes
fonte
FYI: A versão BSD (por exemplo, padrão macOS de fato) normalmente não cooperará a menos que você crie um backup (2. b) ou use o método de desvio de backup (2. c). A versão GNU não solicitará isso. Ele irá editar destrutivamente e substituir arquivos existentes sem hesitação.
vozes
4

Em sed -hter:

  -i[SUFFIX], --in-place[=SUFFIX]
             edit files in place (makes backup if SUFFIX supplied)

e 'execute a operação no próprio arquivo'. é absoluto.

E mandisse: 'Sed é um editor de stream. Um editor de fluxo é usado para executar transformações básicas de texto em um fluxo de entrada (um arquivo ou entrada de um pipeline). '

como sua pergunta,

sed -i '1d' file_name

significa: excluir a primeira linha do arquivo "file_name"no local e fazer backup no arquivo. (assim como editar arquivo e excluir a primeira linha diretamente.)

Sete
fonte