寻找在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
答案 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中转义为-
的结尾),跳过下一个逗号的所有内容,并捕获逗号之间的下两个字段。