2011-10-04 84 views
1

我的sed調用似乎沒有在文檔上激活。我檢查並檢查了正則表達式,它適用於我可用的所有文本編輯器(Geany,Gedit,Notepad ++),任何人對我在做什麼錯誤有任何想法?在shell腳本中未激活的sed

#!/bin/sh 
clear 
antiword q.doc > q.txt 
sed -i -e's/\[.*\]//g' q.txt # replace [...] with nothing 
sed -i -e's/^[ \t]+[o][ \t]//g' q.txt # replace old word UL with nothing 
sed -i -e's/^[ \t]+[•][ \t]//g' q.txt # replace old word UL with nothing 

加分用於顯示我如何刪除多餘的回報在該文件中,使得只有過1,以前有2個或多個元素之間的線。

回答

3

看起來你用Perl語法或正則表達式擴展正則表達式語法編寫了正則表達式,但sed使用basic regular expressions。根據您使用的sed的實現情況,最簡單的解決方案是告訴sed使用帶有-E(Mac OS X)或-r(GNU sed)標誌的擴展正則表達式。您可能還需要將\t設置爲文字標籤。

+0

或通過將'+ +'更改爲'\ +'來糾正正則表達式爲有效的基本RE。 – jamessan

+0

謝謝,-r按預期工作。 –

+1

@jamessan不是那麼簡單。你提出的改變是一個GNU擴展,在其他實現中通常不可用。而且,所有的括號都需要改變。 POSIX BREs *非常小,而且EREs不是很豐富。 –

1

如果您使用GNU-SID:

1號線)工程以及在這裏(刪除配對的方括號之間的一切)。

2線和3)(

從聯機幫助頁[列表]:字符。$,,[,和\通常不特別清單內 例如,[。 *]匹配 '\' 或 '',因爲\是

解決方案不 特殊的位置:而不是[ \t]代碼:[:space:]