
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 awk
Befehls:
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- sed
Alternative (mit dem c
Befehl anstelle des s
Befehls):
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 sed
Antwort, FWIW
sed s/^[^ko].*/-/g filename
Sie ersetzen einfach jede Zeile, die nicht mit beginnt, ko
durch ein -
. (Ich hätte es als Kommentar hinzugefügt, aber ich habe noch keinen Vertreter.)