Como filtrar e redirecionar a saída

1

Eu tenho um comando que produzirá muitos resultados para o STDOUT, que eu sei que pode ser redirecionado para um arquivo desta forma:

./myCMD 1>tmp

Como a saída pode ser filtrada antes de redirecioná-la para o arquivo. Por exemplo, eu gostaria de redirecionar apenas as linhas de saída que contêm alguma palavra-chave.

    
por Yves 07.03.2018 / 10:06

2 respostas

1

Se você quer dizer que deseja apenas algumas linhas para o arquivo tmp , enquanto o resto não é alterado:

cmd | awk '/pattern/ {print > "tmp"; next}
           {print}'

Ou:

cmd | sed '/pattern/!b
           w tmp
           d'

(em uma linha: cmd | sed -e '/pattern/!b' -e 'w tmp' -e d )

Ou:

cmd | sed '/pattern/ {
             w tmp
             d
           }'

(em uma linha: cmd | sed -e '/pattern/{w tmp' -e 'd;}' )

Observe que, para sed , pattern é uma expressão regular básica , enquanto para awk , é uma expressão regular estendida .

    
por 07.03.2018 / 11:34
2

Você pode fazer isso com pipes:

./myCMD | grep keyword > tmp

Isso só gravará linhas contendo "keyword" no arquivo tmp .

    
por 07.03.2018 / 10:08