awk / sed, um nur bis zum Unterstrich zu drucken

33706
Rubstr

Wie kann ich mit awk oder sed eine Zeichenfolge nur bis zum ersten Unterstrich drucken?

Vor:

host100_044 2 host101_045 2 host102_046 2 

Nach dem:

host100 host101 host102 
8

5 Antworten auf die Frage

16
Renan

Dies kann gemacht werden mit cut:

cut -d _ -f 1 

z.B

$ echo host100_044 2 | cut -d _ -f 1 host100 

Auch mit awkkann mit gemacht werden awk -F_ ''(wahrscheinlich gibt es einen saubereren Weg, das zu tun)

@ Renan Wie ändere ich diese Cut-Funktion, wenn die Ausgabe neben dem Cut alle Eingabeinformationen enthalten soll? BioMan vor 9 Jahren 0
2
scriptmonster

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/' 
1
jftuga
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} ' | cut -d ' ' -f2- 

Output:

host100 host101 host102 

With newlines:

echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ ' 

Output:

host100 host101 host102 
1
Prince John Wesley

Mit sed:

echo host100_044 2 | sed 's;_.*;;' 


Mit der sedBearbeitungsoption vor Ort

sed -i.old 's;_.*;;' infile 
War gerade das gleiche, obwohl "awk" -Lösung bereits gepostet wurde (und "cut" ist in diesem Fall wahrscheinlich am besten), da er nach "sed" gefragt hat, aber Sie schlagen mich mit Sekunden :-). Sie können sogar `$` entfernen, da dies standardmäßig `. *` Am Zeilenende entspricht. Daniel Andersson vor 12 Jahren 0
@DanielAndersson: Ja. Prince John Wesley vor 12 Jahren 0
1
Sergey Fadeev
$ echo "host100_044 2" | awk -F'_' '' host100 

Die -F'_'Anweisung awk, Unterstriche als Feldtrennzeichen zu verwenden. Das awkSkript selbst druckt nur das erste Feld.