Risposte:
Questo può essere fatto con cut
:
cut -d _ -f 1
per esempio
$ echo host100_044 2 | cut -d _ -f 1
host100
Anche con awk
può essere fatto con awk -F_ '{print $1}'
(probabilmente c'è un modo più pulito di farlo)
Un'altra alternativa per sed:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'
Se li hai in un file, puoi chiamarlo come segue;
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-
Produzione:
host100 host101 host102
Con le nuove linee:
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'
Produzione:
host100
host101
host102
Utilizzando sed
:
echo host100_044 2 | sed 's;_.*;;'
Utilizzando l' sed
opzione di modifica sul posto,
sed -i.old 's;_.*;;' infile
awk
soluzione è già stata pubblicata (ed cut
è probabilmente la migliore in questo caso), dal momento che mi ha chiesto sed
, ma mi hai battuto in pochi secondi :-). Puoi anche eliminare il simbolo $
, poiché .*
per impostazione predefinita corrisponderà alla fine della riga.
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
I -F'_'
incarica awk
di utilizzare underscore come delimitatori di campo. Lo awk
script stesso stampa solo il primo campo.
Questo stamperà l'output prima di _
:
sed 's/_.*//' -filename