coloque um caractere especial ou em branco se o padrão não for encontrado

coloque um caractere especial ou em branco se o padrão não for encontrado

Tenho a seguinte tabela de informações:

ko:K00624  
ko:K20215   
1.5.3.5   
ko:K01106  
2.3.41.5

Eu quero a saída assim:

ko:K00624    
ko:K20215   
-
ko:K01106  
-

Usei o seguinte comando mas não está funcionando. Por favor me sugira

cat filename | awk '{if($1!~"ko"); print "-") print }' | less

Responder1

Uma possível versão corrigida do seu awkcomando:

awk '{if($1!~"ko") print "-"; else print }' filename

embora possa ser mais vernáculo fazê-lo como

awk '$0 !~ /^ko/ {$0 = "-"} {print}' filename

ou (forma mais curta)

awk '!/^ko/ {$0 = "-"} 1' filename

Outra sedalternativa GNU (usando o ccomando em vez do scomando):

sed '/^ko/!c-' filename

Responder2

sed -e '/^ko/!s/.*/-/' input_file.dat

ou seja, para todas as linhas que não começam com "ko" , basta seguir em frente e substituir a linha completa por um travessão. Para todo o resto, deixe como está e imprima inalterado.

Responder3

Ou....

    ~]$ echo -e  "ko:K00624\nko:K20215\n 1.5.3.5\nko:K01106\n2.3.41.5" \
        | while read line ; do if [[ $line =~ ko ]] ; then echo $line ; else echo "-" ; fi ; done
    ko:K00624
    ko:K20215
    -
    ko:K01106
    -

Responder4

Aqui está minha sedresposta, FWIW

sed s/^[^ko].*/-/g filename

Você apenas substitui todas as linhas que não começam com koa -. (Eu teria adicionado isso como um comentário, mas ainda não tenho o representante.)

informação relacionada