在 Lua 脚本中运行 sed 命令

我需要在 Lua 脚本中运行以下 sed 命令:

sed -i "1i sameText" log.txt

我无法将变量(日志文件名)发送到 sed 命令中。

我尝试了以下方法:

local datafile = log.txt

local date = os.date("%d-%m-%Y,%H:%M:%S")

os.execute('sed -i "1i date,sameText" datafile')

错误信息: sed: no input files

点赞
用户1685701
用户1685701

首先,datafile 应该是一个字符串,而不是一个可能不存在的日志对象的 "txt" 字段。

Lua 字符串中嵌入变量的简单方法是使用 string.format

local datafile = 'log.txt'
local date = os.date("%d-%m-%Y,%H:%M:%S")
local cmd = string.format('sed -i "1i %s,sameText" "%s"', date, datafile)
local r = os.execute(cmd)

如果你只想在文件开头插入文本,你也可以直接在 Lua 中完成而不需要使用 sed:

local function prependToFile(filename, txt)
    local hnd = io.open(filename, "rb")
    local s = hnd:read "*a"
    hnd:close()

    local hnd = io.open(filename, "wb")
    hnd:write(txt, "\n", s)
    hnd:close()
end

local datafile = 'log.txt'
local date = os.date("%d-%m-%Y,%H:%M:%S")
prependToFile(datafile, date .. ",sameText")
2020-10-20 15:20:01