gpt4 book ai didi

linux - 在由未知字符分隔的同一行中多次匹配和替换一个模式

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:00 25 4
gpt4 key购买 nike

给定表单的输入:

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 标记了这个问题,但我对任何事情都持开放态度)

最佳答案

使用 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

请注意,此代码假定 @(...) 的内容是用于日期计算的有效表达式。

解释:

  1. 第一个表达式将替换所有出现的 @()$(date +%s --date "now _expression_") 其中 _expression_将是 -2 天
  2. 第二个替换表达式在整个字符串周围添加 echo "..."执行生成的行。您可以删除第二个表达式中的 e 标志,以找出实际执行的命令。

关于linux - 在由未知字符分隔的同一行中多次匹配和替换一个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31403141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com