在以下文件中,我需要获取其中没有以下模式的所有行:
\"\d\d\d\":[
我不希望行"memo": {
或"notice": "delivered on 17"
,我只希望有\"\d\d\d\":[
的行,但他们有\"\d\d\":[
或\"\s\d\d\":[
等等。如何用sed或awk做到这一点,或者用jq更好?
我只需要其中没有\"\d\d\d\":[
模式的行,例如应报告\"42 \":[
。每条消息行必须有\"\d\d\d\":[
,并且没有其他任何变体。例如\"42a\":[
也是错误的,应该报告
{
"memo": {
"notice": "delivered on 17"
},
"message": "{\"id\":\"1\",\"401\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
"memo": {
"notice": "delivered on 190"
},
"message": "{\"id\":\"2\",\"424\":[[\" 0\",[\"v\",\"UK\"],[\"9\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
"memo": {
"notice": "delivered on 734"
},
"message": "{\"id\":\"3\",\"432\":[[\" 0\",[\"a\",\"UK\"],[\"9\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"v\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
"memo": {
"notice": "delivered on 1092"
},
"message": "{\"id\":\"888\",\"5 2\":[[\" 0\",[\"v\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
作为输出,我需要出现这些问题的行的id值。
上述内容的预期输出:id: 888
,因为在这一行中存在错误的\"5 2\":[
答案 0 :(得分:2)
对所有message
进行解码,选择不包含任何与键\d{3}
匹配的密钥,然后提取其id
。
jq '.message | fromjson | select(any(keys_unsorted[]; test("[0-9]{3}")) | not) .id' file
答案 1 :(得分:0)
在以下文件中,我需要获取所有没有的行 它们具有以下模式:
\"\d\d\d\":[
那
awk '$0 ~ /\\"\\d\\d\\d\\":\[/ {next;}{print;}' test.txt | awk '$0 ~ /memo/ {next;}{print;}' | awk '$0 ~ /notice/ {next;}{print;}'
{ }, “ message”:“ {\” id \“:\” 1 \“,\” 401 \“:[[\” 0 \“,[\” a \“,\” UK \“],[\” b \“,\” Euy / O \“],[\” c \“,\” 20160811 \“],[\” g \“,\” R2 \“]],[\” 1 \“,[\” a \“,\”英国\“],[\” b \“,\” LO \“],[\” c \“,\” 20160811 \“]]]}}” } { }, “ message”:“ {\” id \“:\” 2 \“,\” 424 \“:[[\” 0 \“,[\” v \“,\”英国\“],[\” 9 \“,\” Euy / O \“],[\” c \“,\” 20160811 \“],[\” g \“,\” R2 \“]],[\” 1 \“,[\” a \“,\”英国\“],[\” b \“,\” LO \“],[\” c \“,\” 20160811 \“]]]}}” } { }, “ message”:“ {\” id \“:\” 3 \“,\” 432 \“:[[\” 0 \“,[\” a \“,\” UK \“],[\” 9 \“,\” Euy / O \“],[\” c \“,\” 20160811 \“],[\” v \“,\” R2 \“]],[\” 1 \“,[\” a \“,\”英国\“],[\” b \“,\” LO \“],[\” c \“,\” 20160811 \“]]]}}” } { }, “ message”:“ {\” id \“:\” 888 \“,\” 532 \“:[[\” 0 \“,[\” v \“,\” UK \“],[\” b \“,\” Euy / O \“],[\” c \“,\” 20160811 \“],[\” g \“,\” R2 \“]],[\” 1 \“,[\” a \“,\”英国\“],[\” b \“,\” LO \“],[\” c \“,\” 20160811 \“]]]}}” }
也许您仍然需要清理一些括号。