String concatenate in perl?

2

Peço desculpas se esta pergunta é muito básica, mas eu sou realmente muito nova no perl. Agora quero escrever as duas linhas de código a seguir em uma linha:

perl -e 'print crypt("my_password","\\$my_salt\$")'

perl -pe 's|(root):(\$.*?:)|:my_encrypted_password:|' /etc/shadow

Basicamente, quero substituir o my_encrypted_password pelo que está sendo impresso da primeira linha. Mas não tenho ideia de como escrevê-lo corretamente? Qualquer ajuda será muito apreciada.

    
por Elgs Qian Chen 18.07.2015 / 12:57

1 resposta

2

Você provavelmente quer dizer algo assim:

perl -pe 's|(?<=root:)[^:]*|crypt("my_password","\\$my_salt\$")|e' /etc/shadow

De perldoc perlre :

    Substitution-specific modifiers described in

    "s/PATTERN/REPLACEMENT/msixpodualngcer" in perlop are:

      e  - evaluate the right-hand side as an expression

No lado direito, você pode usar $& para se referir à parte correspondente e $1 para a primeira parte capturada e assim por diante.

    
por 18.07.2015 / 13:32

Tags