2011-09-24 48 views
0

我有這樣如何搜索和使用在一條線上更換SED

文件內容選擇b.id爲cli_id,b.login爲cli_login,b.pname爲cli_name, b.cname作爲cli_phone,b.phone as cli_phone,b.email as cli_email, (從限制中選擇(值/ 1048576),其中limit_name ='disk_space' 和id = b.limits_id)作爲Client_Package,b.cr_date(選擇 FROM_UNIXTIME (b.status = 0,'Active','Inactive')作爲Client_expire, limit_name ='expiration'和id = b.limits_id) Cli_Status,作爲dom_name的a.name, 如果(a.status = 0,'Active','Inactive')與Dom_Package一樣,a.cr_date爲 dom_create,(選擇FROM_UNIXTIME(值,「%Y-%m-%d」)來自限制,其中 limit_name =' (選擇 (值/ 1048576)作爲Dom_Package,round((a.real_size/1048576))限制,其中limit_name ='disk_space'和 id = a.limits_id)作爲dom_expire, Dom_usage from域a,客戶端b其中(選擇 FROM_UNIXTIME(值,「%Y-%m-%d」)來自限制,其中 limit_name ='expiration'和id = a.limits_id和 (FROM_UNIXTIME(value, '2011-08-01'和 '2011-12-01'之間)和a.cl_id = b.id group by a.id;「%Y-%m-%d」

這一切都在一個單一的線

我想以這種格式

「2011-08-01」和「之間單獨更換的日期部分2011-12- 01'

該腳本每週五運行一次,假設如果我在10個月的時候運行這個意味着。

劇本需要修改的值在文件中這樣

每次

「2011-09-01」之間「2012-01-01」

月份需要單獨這種格式的改變

'當月-1month' 之間'當月+ 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 
在此代碼IAM試圖查找和替換

,但它示出了該誤差

的sed:-e表達#1,炭44:無端接`s'的命令

iam做什麼錯誤可以解釋?

回答

1

該表達式沒有正確引用。你從/ ...開始,但以.../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 
+0

嗨, 這個命令不是me..it作品給出了使用CTR infiniete intergers輸出+ C只是我需要打破輸出 –

+0

SED -i「S /在'$(date -v'-1m'+%Y-%m-01)'和'$(date -v')之間的'[0-9-] *'和'[0-9-] *' + 3m'+%Y-%m-01)'/ g「/var/tmp/p.sql 日期:無效選項 - 'v' 嘗試使用'date --help'以獲取更多信息。 日期:無效選項 - 'v' 嘗試'date --help'獲取更多信息。 –