Почему не sed жадный в этом простом случае?

Вы вводите bash. Если Вы хотите, чтобы это было постоянным изменением оболочка по умолчанию к /bin/bash путем редактирования /etc/passwd.

Вот некоторые отрывки от моего /etc/passwd:

avahi:x:84:84:Avahi daemon:/:/bin/false
xenoterracide:x:1000:100::/home/xenoterracide:/bin/zsh
postgres:x:88:88::/var/lib/postgres:/bin/zsh
bob:x:1001:1001::/home/bob:/bin/bash
usbmux:x:140:140:usbmux user:/:/sbin/nologin

Самое последнее поле содержит оболочку, Изменяя поле после последнего : к допустимой или недопустимой оболочке будет работать. /bin/false и /sbin/nologin оба подразумевают, что у пользователя нет реальной оболочки входа в систему, хотя, если pam не настраивается право, это не означает, что они не могут войти в систему (я сообщил об ошибке на этом в Дуге Linux, потому что можно войти в систему графически, не имея оболочки входа в систему). /bin/bash и /bin/zsh оба допустимые оболочки, видят /etc/shells для списка допустимых оболочек в Ваших системах. Вот мой /etc/shells если Вам интересно.

/bin/sh
/bin/bash
/bin/ksh
/bin/zsh
/bin/dash

Да можно использовать chsh или usermod чтобы сделать то же самое, помните, что это просто файлы структурированного текста и TIMTOWTDI.

11
10.06.2011, 23:44
1 ответ

.* жадный первый - это соответствует foo 6. Единственная причина, которую это останавливает, состоит в том, потому что соответствие дальше мешало бы целому шаблону соответствовать, таким образом, это уезжает 5 для ([0-9]+). Если Вы сделали его ([0-9]*) вместо этого .* соответствовал бы целой строке, и Вы ничего не получите в своей группе. Один путь вокруг этого состоит в том, чтобы сказать первой части не соответствовать числам:

$ echo "foo 65 bar" | sed -n -e 's/[^0-9]*\([0-9]\+\).*/\1/p'
65
13
27.01.2020, 19:58

Теги

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