re.sub替换多行字符串

时间:2019-10-31 15:55:17

标签: python

我有以下输入文件,该文件将保险库密码保存到名为encrypted_string的变量中。

cat password.yml
encrypted_string: !vault
          $ANSIBLE_VAULT;1.1;AES257
          64366631356365313732663330666536373037313065396335353630353233373830326336376631
          3935373061383936633535306665373065376366636136350a303335646630633337333732643238
          62313830393437303338346461646133373135623836643538366333346436663762323263666632
          6131333863356636610a613034656161613230613530613538323232386431343333653362336236
          3732

我需要用新的加密字符串替换encrypted_string中的password.yml变量。 为了简单起见,我在下面的python文件中将其硬编码为encrypted_key_raw。 上面的代码应该用新的密钥替换密钥,但是它在密钥后面附加了一个密钥

cat myscript.py
import re
from pathlib2 import Path
file="password.yml"

encryped_key_raw='''!vault
          $ANSIBLE_VAULT;1.1;AES256
          64366631356365313732663330666536373037313065396335353630353233373830326336376633
          3935373061383936633535306665373065376366636136350a303335646630633337333732643240
          62313830393437303338346461646133373135623836643538366333346436663762323263666635
          6131333863356636610a613034656161613230613530613538323232386431343333653362336239
          3732'''


path = Path(file)
text = path.read_text()
text = re.sub(r'^encrypted_string:.*', 'encrypted_string: {}'.format(encryped_key_raw.strip()), text,flags=re.MULTILINE)
path.write_text(text)

当前输出:

cat password.yml
encrypted_string: !vault
          $ANSIBLE_VAULT;1.1;AES257
          64366631356365313732663330666536373037313065396335353630353233373830326336376631
          3935373061383936633535306665373065376366636136350a303335646630633337333732643238
          62313830393437303338346461646133373135623836643538366333346436663762323263666632
          6131333863356636610a613034656161613230613530613538323232386431343333653362336236
          3732
          !vault
          $ANSIBLE_VAULT;1.1;AES256
          64366631356365313732663330666536373037313065396335353630353233373830326336376633
          3935373061383936633535306665373065376366636136350a303335646630633337333732643240
          62313830393437303338346461646133373135623836643538366333346436663762323263666635
          6131333863356636610a613034656161613230613530613538323232386431343333653362336239
          3732

所需的输出:

encrypted_string: !vault
          $ANSIBLE_VAULT;1.1;AES256
          64366631356365313732663330666536373037313065396335353630353233373830326336376633
          3935373061383936633535306665373065376366636136350a303335646630633337333732643240
          62313830393437303338346461646133373135623836643538366333346436663762323263666635
          6131333863356636610a613034656161613230613530613538323232386431343333653362336239
          3732

0 个答案:

没有答案