搜索从命令输出中替换多个字符串(Perl或Sed)

时间:2017-04-20 19:47:04

标签: perl sed pattern-matching

有人可以建议我怎样才能做到这一点:

`

attributes:
     0x00000007 <blob>="Test"
     0x00000008 <blob>=<NULL>
     "acct"<blob>="abc@xyz.com"
     password: "mycrypticpassword"

`

如果我想提取abc@xyz.com和密码值并将它们分配给shell脚本中的变量,可以在perl或sed中完成吗?

由于

2 个答案:

答案 0 :(得分:0)

使用带反向引用的sed:

$ email=$(sed -n 's/[\t ]*"acct"<blob>="\([^"]*\)"/\1/p' file)
$ pass=$(sed -n 's/[\t ]*password: "\([^"]*\)"/\1/p' file)
$ echo $email
abc@xyz.com
$ echo $pass
mycrypticpassword

答案 1 :(得分:0)

使用Perl提取所需的值:

$ perl -nle 'print "$1$2" if /"acct"<blob>="(.*)"|password: "(.*)"/' file
abc@xyz.com
mycrypticpassword

使用$(...)构造获取输出,并使用read EMAIL PASSWORD <<< ...将其分配给两个变量:

$ read EMAIL PASSWORD <<< \
> $(perl -nle 'print "$1$2" if /"acct"<blob>="(.*)"|password: "(.*)"/' file)
$ echo $EMAIL
abc@xyz.com
$ echo $PASSWORD
mycrypticpassword