我有一个日志文件,我试图从中提取字符串。数字字符串是随机生成的,到目前为止我所有使用 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
,而对象又是document
JSON 数据结构顶层数组中特定元素的一部分。
或者,你可以直接提取全部 id
价值观:
jq -r '.. | select(type=="object" and has("id")) | .id' file.json
答案4
使用awk
:
awk -F"[\":]" '{ print $5 }' infile