我有以下代碼用於查找文件中的字符串,然後刪除包含該字符串的行。bash從文件中刪除一行,永久
echo `sed /$string/d file.txt` > file.txt
的問題是,如果最初file.txt的包含:
a
b
c
刪去 「a」 之後(字符串=一)file.txt的將成爲
b c
代替
b
c
任何人都可以幫我嗎?
我有以下代碼用於查找文件中的字符串,然後刪除包含該字符串的行。bash從文件中刪除一行,永久
echo `sed /$string/d file.txt` > file.txt
的問題是,如果最初file.txt的包含:
a
b
c
刪去 「a」 之後(字符串=一)file.txt的將成爲
b c
代替
b
c
任何人都可以幫我嗎?
這是因爲反引號。做到這一點,而不是:如果你想這樣做就地
sed -i /$string/d file.txt
注意,你需要使用-i
到sed
爲>
會破壞文件之前sed
可以讀取它。
你不需要echo
包裹,只需嘗試:
sed -i '/a/d' file.txt
您需要引用命令的輸出:
回聲-n 「sed /$string/d file.txt
」> file.txt的
戰略經濟對話一個就地編輯選項。在你的senario中使用它更合適。 例如
sed -i /$string/d file.txt
對於你的情況的問題,由於'輸出'沒有雙引號括起來,詞的拆分完成後,通過慶典。新行被刪除。 要在這種情況下使用回聲,請這樣做:
echo "`sed /$string/d file.txt`" > file.txt
我們不應該從正則表達式字符首先逃避'$ string'嗎? – Khaledvic 2014-01-01 19:59:35
@Khaledvic:好的。如果'$ string'包含shell發現重要的字符,這個方法也會有問題,例如'!'。基本上,如果'$ string'的內容是未知的,你需要小心地逃避正則表達式和shell重要字符。感謝您指出。 – Thor 2014-01-16 11:51:37