如何使用sed在一行中搜索和替换

如何使用sed在一行中搜索和替换,sed,Sed,我有一个这样的文件内容 选择b.id作为cli\u id,b.login作为cli\u login,b.pname作为cli\u name, b、 cname作为cli_公司,b.phone作为cli_电话,b.email作为cli_电子邮件, 从limit\u name='disk\u space'中的Limits中选择value/1048576 和id=b.limits\u id as Client\u Package,b.cr\u date,选择 从\u UNIXTIMEvalue开始,从

我有一个这样的文件内容

选择b.id作为cli\u id,b.login作为cli\u login,b.pname作为cli\u name, b、 cname作为cli_公司,b.phone作为cli_电话,b.email作为cli_电子邮件, 从limit\u name='disk\u space'中的Limits中选择value/1048576 和id=b.limits\u id as Client\u Package,b.cr\u date,选择 从\u UNIXTIMEvalue开始,从限制开始%Y-%m-%d,其中 limit_name='expiration'和id=b。在客户端过期时限制id, 如果.status=0,'Active','Inactive'作为Cli\u状态,a.name作为dom\u名称, Ifa.status=0,'Active','Inactive'作为Dom\u包,a.cr\u日期作为 dom_create,从_UNIXTIMEvalue中选择,从以下限制中选择%Y-%m-%d limit\u name='expiration'和id=a。limits\u id为dom\u expire,选择 值/1048576,来自limit_name='disk_space'和 id=a.limits\u id为Dom\u包,rounda.real\u大小/1048576为 域a、客户端b中的Dom_使用情况,其中选择 从\u UNIXTIMEvalue开始,从限制开始%Y-%m-%d,其中 限制\u name='expiration'和id=a。限制\u id和 在“2011-08-01”和 “2011-12-01”和a.cl_id=a.id的b.id组

这一切都在一行

因此,我想用这种格式单独替换日期部分

在“2011-08-01”和“2011-12-01”之间

脚本每周五运行,假设我在第10个月运行它

脚本需要像这样更改文件中的值

在“2011-09-01”和“2012-01-01”之间

每个月都需要以这种格式更改

在“本月-1个月”和“本月+3个月”之间

在这段代码中,我试图找到并替换

但它显示了这个错误

sed:-e表达式1,字符44:unterminated's'命令


我犯了什么错误?我能解释吗?

这个表达式没有正确引用。你从s/开始。。。但以/G没有报价。这就是我运行的,它运行良好:

sed -i "s/between '[0-9-]*' and '[0-9-]*'/between '$(date --date'-1month' +%Y-%m-01)' and '$(date --date'+3months' +%Y-%m-01)'/g" file1

您好,这个命令对我不起作用。它使用ctr+c提供Infiniite整数输出,我只需要在“[0-9-]*”和“[0-9-]*”/之间断开输出的-i s/在“$date-v'-1m'+%Y-%m-01”和“$date-v'+3m'+%Y-%m-01'/g/var/tmp/p.sql date:无效选项-'v'Try date-help'获取更多信息。日期:无效选项-“v”请尝试日期-帮助以了解详细信息。
sed -i "s/between '[0-9-]*' and '[0-9-]*'/between '$(date --date'-1month' +%Y-%m-01)' and '$(date --date'+3months' +%Y-%m-01)'/g" file1