Ответы:
Это можно сделать с помощью cut
:
cut -d _ -f 1
например
$ echo host100_044 2 | cut -d _ -f 1
host100
Также с awk
может быть сделано с awk -F_ '{print $1}'
(вероятно, есть более чистый способ сделать это)
Еще одна альтернатива для sed:
echo 'host100_044 2' | sed 's/^\(.*\)_.*$/\1/'
Если у вас есть это в файле, вы можете назвать это следующим образом;
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-
Вывод:
host100 host101 host102
С символами новой строки:
echo host100_044 2 host101_045 2 host102_046 2| sed 's/_/ /g' | awk 'BEGIN { RS="host"} $1 ~ /[0-9]/ {print "host"$1}'
Вывод:
host100
host101
host102
Использование sed
:
echo host100_044 2 | sed 's;_.*;;'
Используя sed
вариант редактирования на месте,
sed -i.old 's;_.*;;' infile
awk
решение уже опубликовано (и cut
, вероятно, лучше в этом случае), так как он спрашивал об этом sed
, но вы меня опередили за секунды :-). Вы можете даже лишить $
, так как это будет соответствовать .*
концу строки по умолчанию.
$ echo "host100_044 2" | awk -F'_' '{print $1}'
host100
В -F'_'
инструктирует awk
использовать знак подчеркивания в качестве поля разделителей. Сам awk
скрипт просто печатает первое поле.
Это напечатает вывод до _
:
sed 's/_.*//' -filename