Lua中。在文件中搜索字符串并打印第二列

时间:2017-06-18 20:32:41

标签: regex lua

寻找在Lua中替换以下命令的解决方案:

grep "dhcp-range" /tmp/etc/dnsmasq.conf | awk -F "\"*,\"*" '{print $2}'

尝试

for line in file:lines() do
        if line:match("([^;]*),([^;]*),([^;]*),([^;]*),([^;]*)") then
                print(line[2])
        end
end

并且它不起作用。

/tmp/etc/dnsmasq.conf看起来像这样

dhcp-leasefile=/tmp/dhcp.leases
resolv-file=/tmp/resolv.conf.auto
addn-hosts=/tmp/hosts
conf-dir=/tmp/dnsmasq.d
stop-dns-rebind
rebind-localhost-ok
dhcp-broadcast=tag:needs-broadcast

dhcp-range=lan,192.168.34.165,192.168.34.179,255.255.255.0,12h
no-dhcp-interface=eth0

2 个答案:

答案 0 :(得分:2)

这是Lua中的一个函数,如果将整个文件内容传递给它,它将打印您需要的值:

function getmatches(text)
    for line in string.gmatch(text, "[^\r\n]+") do
        m,n = string.match(line,"^dhcp%-range[^,]*,([^,]+),([^,]+)")
        if m ~= nil then 
            print(m,n) 
        end
    end
end

请参阅Lua demo

使用string.gmatch(text, "[^\r\n]+"),访问每个文件行(根据需要调整),然后主要部分m,n = string.match(line,"^dhcp%-range[^,]*,([^,]+),([^,]+)")使用第一个IP m实例化n使用以dhcp-range开头的行找到第二个IP。

Lua模式详情

  • ^ - 字符串开头
  • dhcp%-range - 文字字符串dhcp-range(一个-是Lua中的一个量词,匹配0次或多次,但数量尽可能少,并匹配文字{{1} },它必须被转义。正则表达式转义由-形成。)
  • % - 除[^,]*,以外的0 +字符,然后是,
  • , - 第1组(([^,]+)):m以外的一个或多个字符
  • , - 逗号
  • , - 第1组(([^,]+)):除n以外的一个或多个字符。

答案 1 :(得分:0)

试试这段代码:

for line in io.lines() do
    local a,b=line:match("^dhcp%-range=.-,(.-),(.-),")
    if a~=nil then
        print(a,b)
    end
end

模式显示:在行的开头匹配dhcp-range=(注意在Lua中转义为-的结尾),跳过下一个逗号的所有内容,并捕获逗号之间的下两个字段。