给出表格的输入:
select * from foo where ts>@(-2 days) and ts < @(-1 hour)
(这当然只是一个例子。我想支持任何查询构造和@()中的任何表达式
我想将每个@()
中的表达式替换为评估date --date=exp +%s
的结果,其中'exp'是表达式(因此在上面的示例中结果将是
select * from foo where ts>1436694136 and ts < 1436863336
更一般地说,如何用模式中的捕获作为参数调用shell命令来替换模式?
(我用perl和bash标记了这个问题,但我对任何事情持开放态度)
答案 0 :(得分:1)
下面的内容(未经测试)
var ErrArr = [];
$(document).ready(function () {
$('#btnSave').click(function (e) {
e.preventDefault();
validateTitle();
validatePrefix();
validateTextBoxes();
if(ErrArr.length > 0) {
alert(ErrArr.join("\n"));
ErrArr = [];
return false;
}
});
function validateTitle() {
if ($("#ddlTitle").val() > "0") {
if ($("#ddlTitle").val() == "1104" && $("#txtTitle").val() === "") {
ErrArr.push("Please enter the text in other title");
}
} else {
ErrArr.push('Please select the title');
}
}
function validatePrefix() {
if ($("#ddlPrefix").val() > "0") {
if ($("#ddlPrefix").val() == "1110" && $("#txtPrefix").val() === "") {
ErrArr.push("Please enter the text in other prefix");
}
} else {
ErrArr.push('Please select the prefix');
}
}
function validateTextBoxes() {
if ($("#txtFirstName").val() === "") {
ErrArr.push('First name is required');
}
if ($("#txtMiddleName").val() === "") {
ErrArr.push('Middle name is required');
}
if ($("#txtLastName").val() === "") {
ErrArr.push('Last name is required');
}
if ($("#txtFatherName").val() === "") {
ErrArr.push('Father name is required');
}
if ($("#txtCurrentCompany").val() === "") {
ErrArr.push('Current company is required');
}
if ($("#txtDateofJoin").val() === "") {
ErrArr.push('Date is required');
}
if ($("#txtCurrentExp").val() === "") {
ErrArr.push('Current Experience is required');
}
}
});
答案 1 :(得分:1)
使用gnu sed:
$ sql_expr="select * from foo where ts>@(-2 days) and ts < @(-1 hour)"
$ sed -r 's|@\(([^)]*)\)|$(date +%s --date "now\1")|g; s|.*|echo "&"|e' <<< "$sql_expr"
Gave:
select * from foo where ts>1436696209 and ts < 1436865409
请注意,此代码假定@(...)
的内容是有效的表达式,用于日期计算。
说明:
@()
个匹配项替换为$(date +%s --date "now _expression_")
,其中_expression_
将类似于-2 days
。echo "..."
执行生成的行。您可以删除第二个表达式中的e
标志,以找出实际执行的命令。