Оболочка только для смены пароля

\2 указывает на печать второго совпадения, если ваша цель — напечатать :my-team(, неясно из вашего вопроса ), вы можете сделать это:

echo 'origin git@bitbucket.org:my-team/myrepo.git (fetch)' |\
 gsed "s/origin.*bitbucket.org\(:.*\)\/.*/\1/"

Чтобы по-прежнему совпадать в случае наличия :или /, вы можете использовать группы, не соответствующие -. Вместо (<regex>)они записываются как(:?<regex>):

echo 'origin git@bitbucket.org:my-team/myrepo.git (fetch)' |\ 
gsed -r "s/origin.*bitbucket.org(:?:|\/)(.*)\/.*/\2/"

Это даст my-teamдля обоих:

  • 'происхождение git@bitbucket.org :моя -команда/myrepo.git (выборка )'
  • 'происхождение git@bitbucket.org/my -team/myrepo.git (выборка )'

Я думаю, что путаница возникает из-за того, что в sed для разделения команды вы можете использовать любой символ (часто вы будете видеть / )это требует, чтобы вы экранировали этот символ в регулярном выражении. Так что если вы не в курсе этого непонятно чего бежать. Если вы используете ,вместо /, этот символ не нужно экранировать :

.
echo 'origin git@bitbucket.org:my-team/myrepo.git (fetch)' |\
 sed -r "s,origin.*bitbucket.org(:?:|/)(.*)\/.*,\2,"

И вам на самом деле не нужен :?, если вы уверены, что один из двух символов(:или/)всегда будет присутствовать.

0
28.10.2020, 02:56
1 ответ

Что вам нужно сделать, так это заменить оболочку в файле /etc/passwdна /usr/bin/passwdили любой другой путь к вашей команде passwd. Вы можете сделать это с помощью команды vipw. Я не уверен, что chshпозволит вам перейти на двоичный файл оболочки, отличный от -, в этом поле.

usermod -sтакже ищет одобренную оболочку, а /bin/passwdявно не одобренная оболочка.

0
18.03.2021, 22:54

Теги

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