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