Geben Sie ein Sonderzeichen oder ein Leerzeichen ein, wenn das Muster nicht gefunden wurde.

Geben Sie ein Sonderzeichen oder ein Leerzeichen ein, wenn das Muster nicht gefunden wurde.

Ich habe die folgende Tabelle mit Informationen:

ko:K00624  
ko:K20215   
1.5.3.5   
ko:K01106  
2.3.41.5

Ich möchte die Ausgabe wie folgt:

ko:K00624    
ko:K20215   
-
ko:K01106  
-

Ich habe den folgenden Befehl verwendet, aber er funktioniert nicht. Bitte schlagen Sie mir vor

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

Antwort1

Eine mögliche korrigierte Version Ihres awkBefehls:

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

obwohl es umgangssprachlicher wäre, es so auszudrücken:

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

oder (kürzere Form)

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

Eine weitere GNU- sedAlternative (mit dem cBefehl anstelle des sBefehls):

sed '/^ko/!c-' filename

Antwort2

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

Das heißt, Sie ersetzen alle Zeilen, die nicht mit „ko“ beginnen, einfach durch einen Bindestrich. Alles andere lassen Sie so, wie es ist, und drucken es unverändert aus.

Antwort3

Oder....

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

Antwort4

Hier ist meine sedAntwort, FWIW

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

Sie ersetzen einfach jede Zeile, die nicht mit beginnt, kodurch ein -. (Ich hätte es als Kommentar hinzugefügt, aber ich habe noch keinen Vertreter.)

verwandte Informationen