2010-01-27 178 views
4

試圖管上的一個文本文件中的sed替換的輸出到MySQL,像這樣:shell腳本:發送sed輸出到mysql?

mysql -D WAR | sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql 

無法運作。也不是:

mysql -D WAR < sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql 

這裏有什麼合適的解決方案?

回答

5
sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql | mysql -D WAR 
+1

不需要輸入重定向。 – ghostdog74 2010-01-27 05:13:48

0
mysql -D WAR < <(sed -e "s/2000/$START/g" -e "s/2009/$END/g" < WAR.sql) 
1

只是爲了解釋一點,在命令行中從左側向右運行,除了在輸入重定向的情況。所以,你的第一個原因不起作用的原因是因爲這是將mysql的OUTPUT併發送給sed,以及嘗試將輸入從文件'WAR.sql'重定向到sed。

在第二種情況下,您在mysql上使用文件重定向,除非您給它一個命令(在本例中爲sed),這意味着shell可能試圖打開[不存在的]文件在當前目錄中命名爲'sed'。下一個輸入重定向可能會讓它感到困惑,如果shell甚至可以解析它。

我相信(並投票)從gbacon的答案作爲最簡單的解決方案來實現我認爲你想要的。

6
sed "s/2000/$START/g;s/2009/$END/g" WAR.sql | mysql -D WAR 
+0

是的,這比接受的答案要好 – 2011-09-01 15:55:18