Antworten:
Dies kann erfolgen mit cut
:
cut -d _ -f 1
z.B
$ echo host100_044 2 | cut -d _ -f 1
host100
Auch mit awk
kann getan werden awk -F_ '{print $1}'
(wahrscheinlich gibt es einen saubereren Weg, das zu tun)
Eine weitere Alternative für sed:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'
Wenn Sie diese in einer Datei haben, können Sie sie wie folgt aufrufen:
cat fileName | sed 's/^\(.*\)_.*$/\1/'
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} {printf("host%s ", $1)}' | cut -d ' ' -f2-
Ausgabe:
host100 host101 host102
Mit Zeilenumbrüchen:
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'
Ausgabe:
host100
host101
host102
Verwenden von sed
:
echo host100_044 2 | sed 's;_.*;;'
Verwenden der sed
Bearbeitungsoption an Ort und Stelle,
sed -i.old 's;_.*;;' infile
awk
Lösung bereits gepostet ist (und cut
in diesem Fall wahrscheinlich am besten ist), da er danach gefragt hat sed
, aber du hast mich mit Sekunden geschlagen :-). Sie können das sogar entfernen $
, da es .*
standardmäßig mit dem Zeilenende übereinstimmt .
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
Die -F'_'
Anweisung awk
, Unterstriche als Feldtrennzeichen zu verwenden. Das awk
Skript selbst druckt nur das erste Feld.
Dadurch wird die Ausgabe vor _
:
sed 's/_.*//' -filename