2016-05-15 26 views
2

で文字列内のすべての重複空白を置き換えることができます。私は、SEDを使用して、単一のタブに単語間の空白を変換しようとしているが、間隔てるどのように私は次の文字列持つタブ

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

を出力では等しくはありません。私はここで間違って何をしていますか?

コマンド

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'を削除する必要がありますか?これはうまくいくようです: 'echo '1 NXA-PAC-1100W-B AC 1080.00 90.00 ok' | sedの/ \ s \ +/\ t/g "です。 –

答えて

4

+あなたの例では、あなたがスペースに加え、1つ以上のスペースを指定しているので、 "一つ以上" を意味し、したがって、2つ以上のスペース。あなただけの

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

関連する問題