解析lua文件的脚本

时间:2019-08-08 10:53:45

标签: bash lua

我有一个来自XMPP韵律服务器的文件,该文件将消息记录在一个房间中。该文件如下所示:

item({
    {
        "Test1";
        ["attr"] = {};
        ["name"] = "body";
    };
    {
        ["name"] = "origin-id";
        ["attr"] = {
            ["id"] = "36cface5-e780-4594-b859-03ff635263bc";
            ["xmlns"] = "urn:xmpp:sid:0";
        };
    };
    ["with"] = "message<groupchat";
    ["name"] = "message";
    ["when"] = 1565197939;
    ["key"] = "U5KzbmuUEQN4QCIN";
    ["attr"] = {
        ["stamp_legacy"] = "20190807T17:12:19";
        ["type"] = "groupchat";
        ["to"] = "help@room.myserver.com";
        ["from"] = "help@room.myserver.com/myusername";
        ["id"] = "36cface5-e780-4594-b859-03ff635263bc";
        ["stamp"] = "2019-08-07T17:12:19Z";
        ["xml:lang"] = "en";
    };
});
item({
    {
        "Test 2\n";
        ["attr"] = {};
        ["name"] = "body";
    };
    {
        ["name"] = "origin-id";
        ["attr"] = {
            ["id"] = "fc944764-2fd3-4102-a5d0-1572163baa2b";
            ["xmlns"] = "urn:xmpp:sid:0";
        };
    };
    ["with"] = "message<groupchat";
    ["name"] = "message";
    ["when"] = 1565198050;
    ["key"] = "DH3THj8R4QcIkFsm";
    ["attr"] = {
        ["stamp_legacy"] = "20190807T17:14:10";
        ["type"] = "groupchat";
        ["to"] = "help@room.myserver.com";
        ["from"] = "help@room.myserver.com/myusername";
        ["id"] = "fc944764-2fd3-4102-a5d0-1572163baa2b";
        ["stamp"] = "2019-08-07T17:14:10Z";
        ["xml:lang"] = "en";
    };
});

我想创建一个bash脚本,该脚本将创建如下文件:

Date, Hour, Username, Message
Date, Hour, Username, Message
Date, Hour, Username, Message

以便阅读该讨论会更容易。

这意味着应该为每个项目选择一个

For Date, Hour: ["stamp"]
For username: ["from"]
For message: what is between the first quotes, so for example "Test1"  or Test 2\n

我不知道该怎么做。 sed?啊?还有其他东西吗?

1 个答案:

答案 0 :(得分:1)

正如所指出的那样,使用sedawk等bash命令首先是困难的,其次是非常危险的:仅当您的数据始终看起来像该示例一样时,它才有效。

我建议使用更高级的工具。但是无论如何,仅出于练习目的,这是一个bash命令,仅在此特定示例上可以执行您想要的操作 :

cat you_log_file \
   | grep -E '("stamp")|(^ +")|("from")' \
   | sed -E 's/.*=? "(.*)";/\1@@/g' \
   | paste -d\ - - - - \
   | awk -F@@ '{ print substr($3, 2, 10)","substr($3, 13, 8)","$2","$1 }'

输出:

2019-08-07,17:12:19, help@room.myserver.com/myusername,Test1
2019-08-07,17:14:10, help@room.myserver.com/myusername,Test 2\n