Encontre texto em um arquivo e copie-o para outro arquivo

1

Existe algum comando no Linux para encontrar texto em um arquivo e, se encontrado, copiá-lo em outro arquivo?

Usando sed -i , podemos encontrar texto, mas como copiar toda a linha em outro arquivo?

    
por jordan 18.06.2015 / 06:50

4 respostas

5

Não use sed -i - ele substituiria seu arquivo original.

Use o grep no lugar.

grep "text to find" input.txt > output.txt
    
por 18.06.2015 / 07:11
2

sed envia para stdout por padrão. Para gerar saída para um arquivo, redirecione sed ' stdout para um arquivo usando o operador > (se desejar criar um novo arquivo) ou usando o operador >> (se desejar anexar a saída a um arquivo já existente):

sed '/text/' inputfile > outputfile
sed '/text/' inputfile >> outputfile
    
por 18.06.2015 / 07:02
0

Você pode usar o grep. Vamos dizer que você quer pesquisar no arquivo source_file, eo segundo arquivo onde você tem as linhas que você deseja pesquisar é input_file. Use

    grep -f input_file source_file > output_file

Digamos que o seu source_file seja

    Humpty Dumpty sat on a wall
    Humpty Dumpty had a great fall
    All the King's horses and 
    All the Queen's men
    COuld not put Humpty together again

E o arquivo de entrada é

    Humpty
    Queen

A sua saída seria

    Humpty Dumpty sat on a wall
    Humpty Dumpty had a great fall
    All the Queen's men
    COuld not put Humpty together again
    
por 19.06.2015 / 11:00
0

sed -i é para edição no local:

de man sed

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

sed é uma boa escolha, mas você também pode usar awk

 awk '/<your_pattern>/' foo > bar

Exemplo

$ cat foo
foo bar foobar
bar foo bar
bar foo

$ awk '/foobar/' foo > bar

$ cat bar
foo bar foobar
    
por 19.06.2015 / 13:31