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

4

Eu tenho a seguinte tabela de informações:

ko:K00624  
ko:K20215   
1.5.3.5   
ko:K01106  
2.3.41.5

Eu quero o resultado assim:

ko:K00624    
ko:K20215   
-
ko:K01106  
-

Eu usei o seguinte comando, mas não está funcionando. Por favor me sugira

cat filename | awk '{if($1!~"ko"); print "-") print }' | less
    
por Masum Billah 28.04.2017 / 04:27

5 respostas

-1

Aqui está minha resposta sed , FWIW

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

Você acabou de substituir todas as linhas que não começam com ko por - . (Eu teria adicionado como comentário, mas ainda não tenho o representante).

    
por 28.04.2017 / 11:33
8

Uma possível versão corrigida do seu comando awk :

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

embora possa ser mais vernacular fazer como

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

ou (forma mais curta)

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

Outra alternativa de sed do GNU (usando o comando c em vez do comando s ):

sed '/^ko/!c-' filename
    
por 28.04.2017 / 05:02
5
sed -e '/^ko/!s/.*/-/' input_file.dat

significando, para todas as linhas que não começam com "ko", vá em frente e substitua a linha completa por um traço. Para todo o resto, deixe como está e imprima inalterado.

    
por 28.04.2017 / 04:40
1

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
    -
    
por 28.04.2017 / 05:27
1
perl -nE 'say  /(^ko.*)/ ? $1 : "-"'  input.txt
    
por 28.04.2017 / 11:45

Tags