sedを使用して複数のスペースを1つに削除するには?

sedを使用して複数のスペースを1つに削除するには?

sedAIXで行う必要があると思うことはしません。 IOSTAT出力で複数のスペースを単一のスペースに置き換えようとしています。

# iostat
System configuration: lcpu=4 drives=8 paths=2 vdisks=0

tty:      tin         tout    avg-cpu: % user % sys % idle % iowait
          0.2         31.8                9.7   4.9   82.9      2.5

Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn
hdisk9           0.2      54.2       1.1   1073456960  436765896
hdisk7           0.2      54.1       1.1   1070600212  435678280
hdisk8           0.0       0.0       0.0          0         0
hdisk6           0.0       0.0       0.0          0         0
hdisk1           0.1       6.3       0.5   63344916  112429672
hdisk0           0.1       5.0       0.2   40967838  98574444
cd0              0.0       0.0       0.0          0         0
hdiskpower1      0.2     108.3       2.3   2144057172  872444176

# iostat | grep hdisk1
hdisk1           0.1       6.3       0.5   63345700  112431123

#iostat|grep "hdisk1"|sed -e"s/[ ]*/ /g"
 h d i s k 1 0 . 1 6 . 3 0 . 5 6 3 3 4 5 8 8 0 1 1 2 4 3 2 3 5 4

sedはグループ全体(/ g)を検索し、複数のスペース(/ [] * /)を単一のスペース(/ /)に置き換える必要があります。しかし、それはそうではありません...各文字の間隔を指定します。 。

私は何が間違っていましたか?私はそれが単純なものでなければならないことを知っていました... AIX 5300-06

編集する:10台以上のハードドライブを持つ1台のコンピュータがあります。モニターのために他のプログラムのパラメーターとして使用しています。

私が経験している問題は、2番目のステップで$ 1などを使用して印刷コマンドにエラーが発生するため、「awk '{print $ 5}」が機能しないことです。するようです:

iostat | grep "hdisk1 " | sed -e's/  */ /g' | cut -d" " -f 5

[]が「ただ一つ」を意味すると思ったとき、彼らは「0以上」です。ブラケットだけを外すと機能します。 3つの非常に良い答えがあり、「答え」を選択するのはすぐに難しくなります。

ベストアンサー1

/[ ]*/マッチ若い以上の空白がなければ、空の文字列は文字間で一致します。

「1 つ以上のスペース」を一致させるには、次のいずれかを使用します。

... | sed 's/  */ /g'
... | sed 's/ \{1,\}/ /g'
... | tr -s ' '

おすすめ記事