【问题标题】:How to use this regex with grep in shell script?如何在 shell 脚本中将此正则表达式与 grep 一起使用?
【发布时间】:2022-01-14 00:16:01
【问题描述】:

我需要在 shell 脚本中提取公钥,不知道如何使用它。我是 shell 脚本的新手。 https://regex101.com/r/SXDEaU/1

文件内容:

public_key=#STARTKEY#<public key base64 encoded>#ENDKEY#

正则表达式:/public_key=#STARTKEY#(.*)#ENDKEY#/s

由于key是base64编码的,所以是多行字符串。

期望的输出:

【问题讨论】:

  • 请将该示例输入的所需输出(无描述、无图像、无链接)添加到您的问题(无评论)。
  • grep -Pzo '(?&lt;=public_key=#STARTKEY#)[\s\S]*(?=#ENDKEY#)' file ?

标签: regex bash shell perl grep


【解决方案1】:
perl -M5.010 -0777ne'say for /public_key=#STARTKEY#(.*?)#ENDKEY#/s' file

密钥是-0777,它将整个文件作为一行读入。

【讨论】:

  • 我会使用([^#]*)而不是(.*),然后从匹配项中删除所有非base64字符(如换行符)
  • @Fravadona,我没有看模式;我只是展示了如何按要求使用它。 [^#]* 不正确,应该是 (?:(?!#ENDKEY#).)*。但是.*? 在这里也可以,而且会比.* 更好。调整答案。 /// 不要求去除非 base64 字符,并不总是可取的,并且在不知道正在使用哪种 base64 风格的情况下无法完成。
  • 哦是的,perl当然有非贪心*
【解决方案2】:

使用awk 使用其RS 变量并将其设置为段落模式,请尝试以下代码。

awk -v RS= 'match($0,/public_key=#STARTKEY#.*#ENDKEY#/){print substr($0,RSTART+21,RLENGTH-29)}'  Input_file

【讨论】:

  • 不支持空行。但在允许的情况下,一个人极不可能遇到任何问题。所以这可能不是问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 2016-06-25
  • 2010-12-10
  • 1970-01-01
  • 2012-01-25
相关资源
最近更新 更多