Odpowiedzi:
Można to zrobić za pomocą cut
:
cut -d _ -f 1
na przykład
$ echo host100_044 2 | cut -d _ -f 1
host100
Również awk
można zrobić z awk -F_ '{print $1}'
(prawdopodobnie istnieje sposób czystsze robi to)
Kolejna alternatywa dla sed:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'
Jeśli masz je w pliku, możesz wywołać go w następujący sposób;
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-
Wynik:
host100 host101 host102
Z nowymi liniami:
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'
Wynik:
host100
host101
host102
Używanie sed
:
echo host100_044 2 | sed 's;_.*;;'
Korzystanie sed
z opcji edycji na miejscu,
sed -i.old 's;_.*;;' infile
awk
rozwiązanie jest już opublikowane (i cut
prawdopodobnie jest w tym przypadku najlepsze), ponieważ zapytał o sed
, ale pobiłeś mnie sekundami :-). Możesz nawet usunąć $
, ponieważ .*
domyślnie dopasuje się do końca linii.
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
W -F'_'
przesyła zlecenie awk
używać podkreślenia jako ograniczniki pól. Sam awk
skrypt po prostu drukuje pierwsze pole.
Spowoduje to wydrukowanie wyniku przed _
:
sed 's/_.*//' -filename