Удаление всего после шаблона с помощью sed или awk

Установщик является только текстовым, но после установки ОС вы можете запустить «pkg install solaris -desktop», чтобы получить Xorg, GNOME 3.24, Firefox, Pidgin и другие пакеты, поставляемые с Live CD/USB. изображения в предыдущих выпусках.

Это описано в документации по Solaris 11.4 в разделеУстановка ОС Oracle Solaris.

0
20.02.2020, 16:40
3 ответа

Помимо вопроса, действительно ли это нужно делать с помощью простых инструментов -обработки текста, ваш sedвызов очищает всю строку, потому что команда "substitute" заменяет весь найденный шаблон на замена (в вашем случае на пустую строку ).

Минимальной модификацией для того, чтобы ваша строка sedработала, было бы написать

sed 's/root:\*:0:.*/root:*:0:/' /etc/group

или, используя группы захвата,

sed 's/\(root:\*:0:\).*/\1/' /etc/group

(и, кстати, catникогда не требуется при использовании sedили awk, просто укажите файл в качестве аргумента строки команды -).

Однако решение, представленное @Shawn, в этом отношении более элегантно.

1
28.04.2021, 23:22

Вы можете использовать адрес с sed, чтобы ограничить количество строк, на которые нужно воздействовать:

 sed '/^root:/s/:[^:]*$/:/' /etc/group

Что для строки (s ), начинающейся с root:, удаляет все символы после последнего :в строке.

(/etc/groupзаписи имеют только 4:-столбца с разделителями, поэтому он удаляет последний со всеми членами группы в нем)

3
28.04.2021, 23:22

Сawk:

awk 'BEGIN{OFS=FS=":"} $1=="root"{$NF=""} 1' /etc/group

Разделить поля на :и установить в последнем поле пустую строку, если первое поле — root.

1
28.04.2021, 23:22

Теги

Похожие вопросы