Вопрос: что означает «s / quiet init =. * $ //»?

У меня возникли проблемы с пониманием приведенной ниже команды. Я понимаю аргумент -i означает «insert», и последний аргумент явно ссылается на файл, который нужно изменить, но кто-то может объяснить второй аргумент – s/ quiet init=.*$//

 sed -i 's/ quiet init=.*$//' /boot/cmdline.txt 

Файл /boot/cmdline.txt выглядит так:

 dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh 

-i для sed GNU на самом деле означает изменить файл на месте, а не «вставить»,

остальное – это sed-скрипт, означающий, что мы собираемся сделать замену, тогда первая / отмечает начало регулярного выражения до следующего / так в этом случае шаблон будет quiet init=.*$ который найдет строку quiet init= и все оттуда до конца строки. Следующая часть – это то, что нужно заменить подстроенным выражением, в нашем случае это пустая строка, поэтому мы фактически удаляем эту часть строки

Кажется, вы путаете опции командной строки sed с самими командами sed.

Опция изменяет поведение по умолчанию команды sed и sed определяет, какие действия вы собираетесь делать с sed .

-i в вашем случае это inplace edit, что означает, что изменения постоянно записываются в соответствующий файл, поэтому вы меняете файл

Не путайте это с помощью команды i которая используется для вставки строки в нужное место. Например

 sed -i '1,i\header' file # i inside single quotes is command 

добавляет header строки в первую строку файла.

В вашем случае s – это команда подстановки, общий формат для которой

s/pattern/substition/flag

Подробнее см. В [sed manual] .