2012-12-17 404 views
3

我目前正在處理一個shell腳本,其中有時可能會將錯誤輸出到文件中,但我需要移動錯誤,因爲它不代表任何操作,一切正常只要錯誤不存在。在bash腳本中使用sed從文件中刪除一行

我有具有以下的腳本:

ftp ftp://$2:[email protected]$1 <<BLOCK> $5 
cd "$4" 
ls 
quit 
BLOCK 

$ 5是FTP命令的輸出寫入文件。因此,在該文件中,我有以下

total 8 
-rw-r--r-- 1 root root 42 Dec 17 14:26 test1.txt 
-rw-r--r-- 1 root root 6 Dec 17 14:08 test2.txt 

有時我得到的錯誤?Invalid command.所以我用sed從文件中刪除錯誤。我已經將shell腳本更改爲以下內容。測試注意事項我已將error放入FTP中以確保我收到上述錯誤消息。

ftp ftp://$2:[email protected]$1 <<BLOCK> $5 
cd "$4" 
ls 
error 
quit 
BLOCK 
fileout=$(sed '/?Invalid command./d' $5) 
echo $fileout > $5 

這是工作在這個意義上,我刪除了錯誤信息,但它也消除了換行,所以當我看一下這個文件,我得到以下

total 8 -rw-r--r-- 1 root root 42 Dec 17 14:26 test1.txt -rw-r--r-- 1 root root 6 Dec 17 14:08 test2.txt 

如何保持線路休息?

感謝您提供的任何幫助。

回答

3

當您echoecho "$fileout" > $5您需要引用fileout,以保留換行符。

但是,您應該簡單地使用sed來編輯「in-place」文件,而不是這樣做。然後,您不必將sed的輸出保存到一個變量中,然後echo再次退出,這是造成該問題的原因。

用途:用於

sed -i '/?Invalid command./d' $5 

代替:

fileout=$(sed '/?Invalid command./d' $5) 
echo $fileout > $5 
+1

報價'sed'的輸出是絕對荒謬的。這正是管道的用途。 –

0

只要做到:

ftp ftp://$2:[email protected]$1 << BLOCK | sed ... > $5 
... 
BLOCK 

或者,如果你喜歡:

ftp ftp://$2:[email protected]$1 << BLOCK | 
... 
BLOCK 
sed ... > $5