Не могли бы вы попробовать следующее.
echo "hello_world 1 2 3" | sed 's/\([^ ]*\).*/\1/'
Объяснение выше:
Использование sed
возможности хранения совпавших регулярное выражение во временный буфер. К которым позже могут обращаться переменные типа 1
, 2
и т. Д. (В зависимости от количества буферов, которые вы упоминаете).
Здесь мы собираем все до появления первого пробела в 1-м временном буфере а затем сохранить все как есть .*
. При подстановке мы упоминаем \1
, что означает замену значения всей строки первым согласованным / сохраненным значением 1-го временного буфера (который равен hello_world
).
Почему код OP не работает: Поскольку OP использует .*
, который является жадным регулярным выражением и захватывает всю строку в 1-м буфере, поэтому при его использовании \1
там печатается целая строка.