如何grep / awk / sed随机模式


0

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

我有一个类似以下的条目:

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

我想解析的是随机生成的

30c962de-b448-40ac-ade8-da6a8f49ce88

任何人都有快速而肮脏的方法来使它起作用吗?


1
看起来是来自更长的JSON文档。您能否再分享一下文档的结构?使用JSON解析器将其拉出很容易。
库萨兰达

Answers:


0

这样又快又脏?

$ 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或类似的数据)。


或者您可以让它使用引号之间的整个长度,但不要贪心。
stackzebra

就像一个魅力谢谢!! 它来自JSON,但正在记录到日志文件中,并在其他地方使用。
凯文

0

在提供的输入上使用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"

0

如果这实际上是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

我没有使用过jq,那么我将如何使用它来提取多个值?我是否可以简单地添加多个AND语句,即and具有(“ id” AND“ status”)或类似的东西?
凯文

@Kevin正如我在对该问题的评论中所写的那样,我们不知道您的文档的结构是什么样。使用jq(或任何其他JSON解析器)进行的查询依赖于在特定位置拉出或检查文档中的特定键/值。编写查询的方式高度依赖于JSON文档的结构。
库萨兰达

0

尝试使用以下提到的sed命令,它也可以正常工作

命令: sed 's/.*:"//1' filename|sed 's/".*//g'

输出

sed 's/.*:"//1' filename |sed 's/".*//g'

30c962de-b448-40ac-ade8-da6a8f49ce88

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.