Если вы определяете поле как любое количество символов без пробела, за которым следует любое количество символов пробела, то вы можете удалить первый N
следующим образом:
$ sed -E 's/([^[:space:]]+[[:space:]]*){1}//' file
Nospaces
One space
Two spaces
Three spaces
Измените {1}
на {N}
, где N
- количество полей, которые нужно удалить. Если вы хотите удалить только 1 поле с самого начала, вы можете полностью удалить {1}
(а также круглые скобки, которые используются для создания группы):
sed -E 's/[^[:space:]]+[[:space:]]*//' file
Некоторые версии sed (например, GNU sed) позволяют использовать сокращение:
sed -E 's/(\S+\s*){1}//' file
Если в начале строки может быть пробел, вы можете добавить \s*
(или [[:space:]]*
) в начало шаблона вне группы:
sed -E 's/\s*(\S+\s*){1}//' file
Проблема с использованием awk заключается в том, что всякий раз, когда вы касаетесь любого из полей данной записи, вся запись переформатируется, в результате чего каждое поле разделяется OFS
(разделитель выходных полей), который по умолчанию является одним пробелом. Вы можете использовать awk с sub
, если хотите, но поскольку это простая замена, sed - правильный инструмент для этой работы.
person
Tom Fenech
schedule
30.03.2016