ponga un carácter especial o en blanco si no se encuentra el patrón

ponga un carácter especial o en blanco si no se encuentra el patrón

Tengo la siguiente tabla de información:

ko:K00624  
ko:K20215   
1.5.3.5   
ko:K01106  
2.3.41.5

Quiero el resultado como este:

ko:K00624    
ko:K20215   
-
ko:K01106  
-

Utilicé el siguiente comando pero no funciona. Por favor sugiérame

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

Respuesta1

Una posible versión corregida de su awkcomando:

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

aunque quizás sea más vernáculo hacerlo así

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

o (forma más corta)

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

Otra sedalternativa de GNU (usando el ccomando en lugar del scomando):

sed '/^ko/!c-' filename

Respuesta2

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

es decir, para todas las líneas que no comienzan con "ko", simplemente continúe y reemplace la línea completa con un guión. Para todo lo demás, déjelo como está e imprima sin cambios.

Respuesta3

O....

    ~]$ 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
    -

Respuesta4

Aquí está mi sedrespuesta, FWIW

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

Simplemente reemplaza cada línea que no comienza kocon -. (Lo habría agregado como comentario pero aún no tengo el representante).

información relacionada