【问题标题】:SED not splitting getting substring I wantSED 不拆分获取我想要的子字符串
【发布时间】:2014-09-01 20:44:37
【问题描述】:

我正在使用消息验证码对文件进行哈希处理,然后我需要在 base64 中对文件哈希进行编码。为此,我使用如下 OpenSSL:

#Create HMAC-SHA2 hash from file
filehash=`mac -a sha256_hmac -k private.key $filename`
##base64 encode filehash
filehash_64=`echo "$filehash" | /usr/sfw/bin//openssl enc -base64 | sed 's/^.*= //'`

问题是 OpenSSL 输出原始哈希和编码哈希,所以我使用 SED 拆分字符串并获取编码部分。但是,当我对此进行测试时,它并没有分裂。

编码文件哈希

YmUzMjA1NzE2MzIyZDYwZWN  YTU5MmRiMGUxYWVjZTk3OQo=

我想要的是这个:

YTU5MmRiMGUxYWVjZTk3OQo=

我是否遗漏了 SED 代码中的某些内容,还是我的管道错误?

sed 's/^.*= //'`

【问题讨论】:

  • 两者都是独立的行吗?
  • 不,由于某种原因,它们在同一输出行上,此处的格式已将它们放在两行上
  • 查看我的编辑,两个字符串都由 whitepace 分隔
  • 你在空格前匹配了=,但它不存在,这就是问题所在。
  • 你能给我新的正则表达式@LevLevitsky

标签: regex bash sed solaris


【解决方案1】:

这个 awk 命令应该可以工作

awk '{print $2}'

【讨论】:

  • 打印第二列,非常基础。
【解决方案2】:

你可以使用这个 sed 命令。

sed 's/^.* //'

例子:

$ echo 'YmUzMjA1NzE2MzIyZDYwZWN  YTU5MmRiMGUxYWVjZTk3OQo=' | sed 's/^.* //'
YTU5MmRiMGUxYWVjZTk3OQo=

【讨论】:

  • Solaris 需要反引号,请注意!
  • 你试过了吗? echo "$filehash" | /usr/sfw/bin//openssl enc -base64 | sed 's/^.* //'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多