2016-05-15 40 views
2

字符串我有以下字符串:我怎麼能代替所有重複的空格與製表符

'1 NXA-PAC-1100W-B  AC 1080.00  90.00  ok' 

我試圖使用SED轉換的話單標籤之間的空白空間,但空間在輸出中看起來不相等。我在這裏做錯了什麼?

命令

echo '1 NXA-PAC-1100W-B  AC 1080.00  90.00  ok' | sed 's/\s\s\+/\t/g' 

結果

'1  NXA-PAC-1100W-B AC  1080.00 90.00 ok' 
+1

您是否考慮使用['unexpand'](http://linux.die.net/man/1/unexpand)? – Alfe

+2

我是否理解你的正確,你是否需要刪除一個'\ s'?這似乎工作:'回聲'1 NXA-PAC-1100W-B AC 1080.00 90.00 ok'| sed's/\ s \ +/\ t/g''。 –

回答

4

+意味着 「一個或多個」,所以在你的例子你指定一個空間,加上一個或多個空格,因此有兩個或更多的空間。你只是想

echo '1 NXA-PAC-1100W-B  AC 1080.00  90.00  ok' | sed 's/\s\+/\t/g' 

或者更冗長,但更多的POSIX-Y

echo '1 NXA-PAC-1100W-B  AC 1080.00  90.00  ok' | sed 's/[[:space:]]\+/\t/g' 

有可能是有關的標籤在你的聲明如何工作「在輸出的間距似乎不等於」有些誤會。但沒有足夠的信息讓我知道,我不想侮辱你,如果沒有。

+1

我認爲'\ +'是BRE的一個GNU擴展,因此「至少一個空格」的更多posix-y將是'[[:space:]] [[:space:]] *'。 –

+0

謝謝!不幸的是,我誤解了標籤在這種情況下的工作方式,我主要是試圖在每個詞之間獲得相等的間距(例如4-5個空格),因此輸出將類似於「1 NXA-PAC-1100W-B AC 1080.00 90.00 ok「(每個單詞之間有4個空格,我可以通過sed的\\ s \ +// g來完成工作。感謝用'+'來澄清問題,絕對有幫助出了很多 – lacrosse1991

相關問題