2016-11-14 241 views
0

以外的所有字符我正在使用此sed命令去除其所有(對於我)不必要字符的文檔。sed刪除除字母和'

sed 's/[^a-zA-Z]/ /g' 

但是挖掘我的數據後有點我意識到一個非常基本的錯誤: 不包括'削減所有我don't s轉換don t s,這吮吸。

所以我想在我的正則表達式中包含'。如果我可以這樣稱呼這種「編碼」,我仍然是新手,所以請原諒我的新手錯誤,甚至更好,向我解釋!

sed 's/[^a-zA-Z']/ /g'這顯然是行不通的

sed 's/[^a-zA-Z\']/ /g'然而,這並不要麼,我還以爲\逃脫'?在行動

+0

你接受我的答案的任何理由?沒有別人的答案,是否有與此相關的問題?告訴我,我會解決它。 –

+0

我看到你已經用解決方案編輯了你的問題。但是你在腳本中引用的代碼不是實際的代碼(sol1/sol2),所以存在問題,但我們沒有看到它。 –

+0

只是真的要引起你的注意,老實說。我將sol1和sol2定義爲您的解決方案,並希望將它們用於文件夾中的所有文件,但它不起作用(我的問題清楚了嗎?)。希望你能再次幫助我。 – Jakob

回答

4

好老雙引號來保護單引號,而不需要轉義的:

sed "s/[^a-zA-Z']/ /g" <<< "don't ... do this" 

給出:

don't  do this 

編輯:您的代碼似乎取代由空間非字母,但你的問題另有說明,所以我給你另一個版本,刪除所有非字母/空格和多個空格(第二個表達式)。

sed -e "s/[^ a-zA-Z']//g" -e 's/ \+/ /' <<< "don't ... do this" 

結果:

don't do this 

EDIT2:替代解決方案能夠保持單引號(森迪普•提供):

`'s/[^ a-zA-Z\x27]//g'` 

注:我第一次試圖逃跑以下單引號測試的解決方案here和沒有使用單引號爲我工作(總是提示行續行),所以我想出了這些替代品。

+0

如果是刪除,是不是應該用空字符串替換? – fedorqui

+0

我認爲OP意味着「太空」。但你是對的。他的代碼和問題之間存在不一致。我將編輯。 –

+2

可以通過使用'\ x27'來避免雙引號...例如:'sed's/[^ a-zA-Z \ x27]// g'<<<「不要。 。做這個「' – Sundeep