BSD sed vs. GNU sed e -i

0

Terminal de shell Unix iMac

sed -i 's/original/new/g' maths.tx  

Mensagem retornada: sed: -i não pode ser usada com stdin

    
por Kam 01.11.2017 / 21:03

2 respostas

3

Os Macs usam a versão BSD dos utilitários, como sed e date , que têm suas próprias idiossincrasias.

Neste caso específico, a compilação BSD de sed manda a extensão para o arquivo de backup com -i , em vez de ser opcional , como no GNU sed .

Como tal:

sed -i .bak 's/needle/pin/g' haystack

O comando mostrado substituirá todas as instâncias de needle por pin no arquivo haystack e o arquivo original será preservado em haystack.bak .

Do manual para a implementação de sed em um Mac:

-i extension
         Edit files in-place, saving backups with the specified extension.  If a zero-length extension is given, no backup will be saved.
         It is not recommended to give a zero-length extension when in-place editing files, as you risk corruption or partial content in
         situations where disk space is exhausted, etc.

Ao contrário de um host Linux:

  -i[SUFFIX], --in-place[=SUFFIX]

          edit files in place (makes backup if SUFFIX supplied)

Observe que "uma extensão de comprimento zero" é diferente de "nenhuma extensão". Você pode evitar o backup totalmente, então, com:

sed -i '' 's/needle/pin/g' haystack
    
por 01.11.2017 / 22:51
0

Você precisa especificar um arquivo de backup, como:

sed -i .bak 's/original/new/g' maths.tx  
    
por 01.11.2017 / 21:05

Tags