如何使用 grep/awk/sed 获取随机模式

如何使用 grep/awk/sed 获取随机模式

我有一个日志文件,我试图从中提取字符串。数字字符串是随机生成的,到目前为止我所有使用 grep/sed/awk 的尝试都没有成功。

我有一个如下所示的条目:

"id":"30c962de-b448-40ac-ade8-da6a8f49ce88","title":

我试图解析的是随机生成的部分

30c962de-b448-40ac-ade8-da6a8f49ce88

有人有一个快速而肮脏的方法来让它工作吗?

答案1

就这么又快又脏吗?

$ grep -o -P '(?<=")[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}(?=")' input
30c962de-b448-40ac-ade8-da6a8f49ce88

查找任何"30c962de-b448-40ac-ade8-da6a8f49ce88"具有固定长度和破折号-位置(用引号引起来)的随机值,并将其打印出来。如果您也想坚持该"id":部分,只需将其添加到主要报价条件中即可(?<=")

但是,如果这是 JSON 或任何正常的数据,您应该考虑使用适当的解析器来处理此类数据(例如jq或其他数据)。

答案2

在提供的输入上使用 AWK 的另一个肮脏技巧。

data='"id":"30c962de-b448-40ac-ade8-da6a8f49ce88","title":
echo $data  | awk -F , '{ print $1}' | awk -F id:  '{print $1}' | awk  '{print $1}'
"30c962de-b448-40ac-ade8-da6a8f49ce88"

答案3

如果这实际上是一个 JSON 文档,那么jq无论数据的格式如何,使用都会拉出字符串:

jq -r '.document[2].part.id' file.json

这假设id键是对象的一部分part,而对象又是documentJSON 数据结构顶层数组中特定元素的一部分。

或者,你可以直接提取全部 id价值观:

jq -r '.. | select(type=="object" and has("id")) | .id' file.json

答案4

使用awk

awk -F"[\":]" '{ print $5 }' infile

相关内容