resultado do comando do console como arquivo de entrada para sed ou outros comandos

0

Alguns comandos pegam um arquivo como uma entrada, existe uma maneira de tratar um resultado de um comando como um arquivo?

por exemplo, eu quero pegar uma string entre 2 strings:

sed -n "/START-WORD-HERE/,/END-WORD-HERE/p" input

mas eu quero usar um comando que gere muito texto como entrada por exemplo 'cat somefile' Eu tentei substituir a entrada com $ (cat somefile), mas sed retornou um erro para cada palavra retornada pelo comando cat ...

    
por user404 12.01.2015 / 19:45

1 resposta

0

Sim, e este é o próprio núcleo da Filosofia do Linux "Muitas pequenas ferramentas para tornar um processo maior"

O Linux usa algo chamado pipes de linha de comando.

Para usá-los, basta juntar dois comandos juntos usando o caractere de barra vertical

|

Então, no seu caso, você disse que queria enviar a saída do comando cat para o comando sed, você pode fazer isso da seguinte forma

cat somefile | sed -n "/START-WORD-HERE/,/END-WORD-HERE/p"

Observe que, neste caso, você NÃO especificará o nome do arquivo após o comando por mais tempo.

99% de todos os comandos do Linux permitirão que você opere usando pipes, mas certifique-se de ler as páginas do manual para alguns deles, já que alguns deles requerem que você ainda especifique o nome do arquivo para trabalhar, mas geralmente lhe diz para usar um

-

(menos caractere)

No lugar do nome do arquivo.

Lembre-se também que na maioria dos casos o pipe é linear, com a saída de uma extremidade formando a entrada da outra, carregando quaisquer transformações realizadas ao longo da cadeia.

Isso significa, por exemplo, se você

cat somefile | grep someword | sed -n "/START-WORD-HERE/,/END-WORD-HERE/p"

A entrada para sed será apenas a saída de quaisquer operações que o grep realizou na entrada do cat.

É sempre melhor testar / experimentar primeiro uma cópia do arquivo até que você saiba que as coisas estão corretas e não tenha medo de desenvolver as coisas um passo de cada vez.

obtenha o

cat blah | grep bleah

pouco certo, antes de adicionar o sed bit. Então pegue o sed bit logo antes de adicionar o awk / wc / whatever else, vendo a saída um passo de cada vez, você irá depurar e verificar o seu pipe durante o processo.

Existem muitos comandos que executam muitos trabalhos diferentes, e é uma ótima desculpa para passar uma noite lendo as páginas dos manuais de ferramentas de linha de comando do Linux. Existem ferramentas para cortar colunas de arquivos, converter documentos do Word em texto, contar linhas e muito mais.

e depois, quando você está entediado com isso, aqui está um link para um artigo que escrevi para o PHP Builder há muito tempo, mostrando como escrever seus próprios processadores de pipe em PHP.

link

Acima de tudo, divirta-se, você pode fazer coisas incríveis com um pequeno número de ferramentas.

    
por 12.01.2015 / 20:38