Jawaban:
Ini dapat dilakukan dengan cut
:
cut -d _ -f 1
misalnya
$ echo host100_044 2 | cut -d _ -f 1
host100
Juga dengan awk
dapat dilakukan dengan awk -F_ '{print $1}'
(mungkin ada cara yang lebih bersih untuk melakukan itu)
Alternatif lain untuk sed:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'
Jika Anda memiliki ini dalam file, Anda bisa menyebutnya sebagai berikut;
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-
Keluaran:
host100 host101 host102
Dengan baris baru:
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'
Keluaran:
host100
host101
host102
Menggunakan sed
:
echo host100_044 2 | sed 's;_.*;;'
Menggunakan sed
opsi edit di tempat,
sed -i.old 's;_.*;;' infile
awk
solusi sudah diposting (dan cut
mungkin yang terbaik dalam hal ini), karena dia bertanya sed
, tetapi Anda mengalahkan saya dengan detik :-). Anda bahkan dapat menghapusnya $
, karena itu akan cocok .*
dengan akhir baris secara default.
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
The -F'_'
menginstruksikan awk
untuk menggunakan garis sebagai pembatas lapangan. The awk
Script itu sendiri hanya mencetak field pertama.
Ini akan mencetak output sebelum _
:
sed 's/_.*//' -filename