Удалить первое слово в текстовом потоке

Как мне удалить первое слово из каждой строки текста в потоке?

Например,

$ cat myfile
some text 1
some text 2
some text 3

Я хочу:

$ cat myfile | magiccommand
text 1
text 2
text 3

Как мне это сделать с помощью Bash? Я мог бы использовать awk '{print $2 $3 $4 $5 ....}', но это беспорядочно и приведет к лишним пробелам для всех нулевых аргументов. Я думал, что sed может это сделать, но я не мог найти никаких примеров этого.


person Trcx    schedule 18.10.2011    source источник
comment
В некоторой степени связано: Как я могу получить первое слово вывода команды в Bash?   -  person Peter Mortensen    schedule 26.04.2021


Ответы (5)


На основе вашего примера текста,

cut -d' ' -f2- yourFile

должен делать свою работу.

person Kent    schedule 18.10.2011
comment
Предупреждение: я попытался использовать это, чтобы удалить индексацию на выходе history, и он не работает в начале истории из-за пробелов перед меньшими числами, действующими как разделители. - person Jason Doucette; 18.07.2018
comment
@JasonDoucette для разных форматов ввода могут потребоваться разные решения - person Kent; 19.07.2018

Это должно работать:

$ cat test.txt
some text 1
some text 2
some text 3

$ sed -e 's/^\w*\ *//' test.txt
text 1
text 2
text 3
person Yanick Girouard    schedule 18.10.2011

Вот решение с использованием awk

awk '{$1= ""; print $0}' yourfile 
person vk239    schedule 16.08.2016
comment
Это оставит пробел в начале каждой строки - person villasv; 16.06.2018

Запустите это:

sed "s/^some\s//g" myfile

Вам даже не нужно использовать трубку.

person user973254    schedule 18.10.2011

Чтобы удалить первое слово до пробела, независимо от того, сколько пробелов существует, используйте: sed 's/[^ ]* *//'

Пример:

$ cat myfile 
some text 1
some  text 2
some     text 3

$ cat myfile | sed 's/[^ ]* *//'
text 1
text 2
text 3
person Benny    schedule 01.03.2018