Qual é a diferença entre sed 's / dia / noite /' old new e sed '/ day / night /' old new

0

Sed - Uma Introdução e Tutorial de Bruce Barnett tem isso em O comando essencial: s para substituição :

A simple example is changing "day" in the "old" file to "night" in the "new" file:

sed s/day/night/ <old >new

Or another way (for UNIX beginners),

sed s/day/night/ old >new

Qual é a diferença? Por que Bruce Barnett especifica que um método é "para iniciantes no UNIX"?

Eu posso ver que old está sendo usado como entrada em ambas as situações, e posso ver que new está sendo usado como saída em ambas as situações. O < extra faz alguma diferença?

    
por ordonezalex 05.07.2017 / 17:08

2 respostas

4

Na prática, isso não muda muito. Na verdade, a primeira variante limita você a um arquivo, enquanto o segundo permite que o sed concatene várias entradas para uma saída, bem como use sua opção de edição no local.

A diferença técnica é que o primeiro método com < e > depende exclusivamente do redirecionamento de shell, um recurso genérico pelo qual o Unix no início era famoso - devido à sua simplicidade e por ser completamente genérico e reutilizável em vários programas: o shell abre o arquivo e entrega a você um descritor de arquivo.

(Outros sistemas da época ou não tinham redirecionamento completo ou precisavam de vários comandos para ativá-lo.)

O último também redireciona a saída, mas não a entrada. Em vez disso, ele pede ao próprio sed para abrir o arquivo de entrada - algo que todo programa tem que implementar sozinho, possivelmente usando sintaxes inconsistentes que você teria que aprender e reaprender; por exemplo. uma ferramenta pode querer --input=original.txt --output=processed.txt e outro -in original.txt . Mas OTOH, como eu mencionei, isso também é mais flexível, pois você não está limitado a uma entrada somente leitura.

Pessoalmente, no entanto, eu diria que agrupar a segunda sintaxe em "... para iniciantes em Unix" é apenas o elitismo ou o pedantismo de 1980, do mesmo tipo que ensinar pessoas por usarem cat foo | bar ou tirarem sarro de Janelas e amp; Usuários de VMS por não serem "iluminados com a Filosofia Unix".

    
por 05.07.2017 / 17:26
1

Parece que Bruce é um "streamist", alguém que acredita em "tudo é um fluxo de bytes" ao ponto de considerar a passagem de arquivos como parâmetros como algo que apenas os iniciantes gostariam de fazer. Algumas razões que eu geralmente prefiro a segunda maneira de fazer as coisas:

  1. é mais curto.
  2. É sintaticamente mais simples.
  3. Ele permite usar, por exemplo, -i[suffix] para substituir in-loco sem muito trabalho extra para trocar arquivos.
  4. Ele funciona bem com outras ferramentas, como xargs .
por 05.07.2017 / 17:24