我有一個bash腳本,用於修改sql文件(test.sql)。Sed - 替換文件第二行中所有出現的字符串
SQL文件如下:
select count(*) from (
select
I.ID,
I.START_DATE,
I.END_DATE
from MY_TABLE I with (nolock)
where I.START_DATE >= '20170101' and I.START_DATE < '20170201'
) as cnt
我想更換所有的字符串START_DATE
的出現,但只有 SQL文件的WHERE
子句。
到目前爲止,我已經試過這樣:
#!/bin/bash
sed 'x; ${/START_DATE/s/START/END;p;x}; 1d' test.sql > new-test.sql
然而,這將返回以下新TEST.SQL文件:
select count(*) from (
select
I.ID,
I.START_DATE,
I.END_DATE
from MY_TABLE I with (nolock)
where I.END_DATE >= '20170101' and I.START_DATE < '20170201'
) as cnt
字符串START_DATE
的WHERE
子句中第二次出現沒有被替換。
我應該如何修改我的sed表達式,以便我可以實現這一目標?
你需要使用'g'標誌來代替所有的事件''s/START/END/g' ...並且你可以使用tac以及''tac test。sql | sed'2s/START/END/g'| tac' – Sundeep
請看看:[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers) – Cyrus