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

时间:2011-09-24 03:21:55

标签: sed

我有像这样的文件内容

  

选择b.id为cli_id,b.login为cli_login,b.pname为cli_name,   b.cname为cli_company,b.phone为cli_phone,b.email为cli_email,   (从限制中选择(值/ 1048576),其中limit_name ='disk_space'   和id = b.limits_id)作为Client_Package,b.cr_date,(选择   来自极限的FROM_UNIXTIME(值,“%Y-%m-%d”)   limit_name ='expiration'和id = b.limits_id)作为Client_expire,   如果(b.status = 0,'Active','Inactive')为Cli_Status,a.name为dom_name,   如果(a.status = 0,'Active','Inactive')为Dom_Package,a.cr_date为   dom_create,(从Limits中选择FROM_UNIXTIME(值,“%Y-%m-%d”)   limit_name ='expiration'和id = a.limits_id)为dom_expire,(选择   (value / 1048576)来自Limits,其中limit_name ='disk_space'和   id = a.limits_id)作为Dom_Package,round((a.real_size / 1048576))as   来自域a的Dom_usage,客户b在哪里(选择   来自极限的FROM_UNIXTIME(值,“%Y-%m-%d”)   limit_name ='expiration'和id = a.limits_id和   (2011-08-01)和之间的(FROM_UNIXTIME(值,“%Y-%m-%d”)   '2011-12-01'))和a.cl_id = b.id group by a.id;

这一切都在一行

因为我想以这种格式单独替换日期部分

  

介于“2011-08-01”和“2011-12-01”之间

该脚本每周五运行,假设我在第10个月运行它意味着。

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

  

在'2011-09-01'和'2012-01-01'之间

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

  

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

sed -i 's/between  '2011-08-01' and '2011-12-01'/'between '$(date --date="- 1 month" +%Y-%m)-01' and '$(date --date="+ 3 months" +%Y-%m)-01'/g file1

在此代码中我试图找到并替换

但它显示此错误

  

sed:-e表达式#1,字符44:未终止的's'命令

我做了什么错误可以解释一下?

1 个答案:

答案 0 :(得分:1)

表达式未正确引用。你从'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