2017-01-09 49 views
0

如何用單個分號替換製表符或空白空格?用分號替換空格或製表符sed

這就是我想:

sed -i.bak 's/(\s)+|(\t)+/,/g' aws_lab.txt 
+/ was unexpected at this time. 

感謝

+0

您需要'-r'才能使用擴展正則表達式。 – aragaer

+0

Try'/ [] + /;/g'其中是它們代表的單個字符 – Marichyasana

+1

@aragaer'-r'只是GNU sed,'-E'也被GNU sed支持,在OSX sed中,因此比'-r'更便於攜帶。 –

回答

2

只要使用適當的POSIX字符類:

sed 's/[[:space:]]\{1,\}/,/g' aws_lab.txt 

很少SEDS將識別\s簡寫[[:space:]]和由於選項卡是[:space:]中包含的字符之一,因此您無需單獨指定它。此外,+是ERE元字符,而不是BRE,默認情況下由sed支持,因此您需要將-E arg添加到sed以使用它(僅受GNU和OSX sed變體支持)。

+1

好點,thx,固定。是的,我知道'[:blank:]'但是幾乎總是這樣,你正在處理的字符串不包含換行符,所以不管你使用'[:blank:]'還是'[:space:]'沒關係,或者你的字符串包含換行符,然後你希望它們像所有其他空格一樣對待,那麼你需要'[:space:]'而不是'[:blank:]''。所以我傾向於總是使用'[:space:]'來表示任何空格,如果我有特定的理由想要排除換行符,只需使用'[:blank:]''。 –

0

這可能會爲你工作(GNU SED):

sed -i.bak 's/[ \t][ \t]*/:/' file 

或者

sed -ri.bak 's/[ \t]+/:/' file 

哪裏有盈標籤的明確空間:

sed -i.bak 's/[ \t][ \t]*/:/g' file 

將取代重複整條線的圖案。