1

変数内の余分なスペースを削除するには?

VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "

Correct result: VAR="Eget ac vel volutpat dic tumst est dui adipiscing" 

16,000,000 以上の編集が必要です。sed遅すぎる!

!!! 編集 !!!

ストリングOK!皆さん、ありがとうございました

しかし

配列の問題のテキスト、ギャップが残ります:-(

ITM=("  Eget ac  vel volutpat   |  Vel volutpat     dic tumst "
     "    Vestibulum  laoreet     a semper  |orttitor      eu laoreet justo congue ")

IFS=$'|'

for (( i=0 ; i<16000000 ; i++ ))
do
    AAA=( ITM[$i] )
    B=${AAA[0]}     # "  Eget ac  vel volutpat   "
    C=${AAA[1]}     # "  Vel volutpat     dic tumst "

done
4

3 に答える 3

2

このためにサブシェルを生成する必要はありません。bash の組み込みパターン置換を使用するだけです。

[ghoti@pc ~]$ shopt -s extglob
[ghoti@pc ~]$ VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "
[ghoti@pc ~]$ VAR=${VAR//+( )/ }
[ghoti@pc ~]$ echo "$VAR"
 Eget ac vel volutpat dic tumst est dui adipiscing 
[ghoti@pc ~]$ VAR=${VAR#+( )}
[ghoti@pc ~]$ echo "$VAR"
Eget ac vel volutpat dic tumst est dui adipiscing
[ghoti@pc ~]$ 
于 2012-11-07T21:53:37.603 に答える
0

引用符を削除するだけです。例:

$ VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "     
$ echo $VAR
Eget ac vel volutpat dic tumst est dui adipiscing
$ echo "$VAR"
    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  
$ 

ご希望の場合:

$ VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "
$ VAR="$(echo $VAR)"
$ echo "$VAR"
Eget ac vel volutpat dic tumst est dui adipiscing

この動作は単語分割と呼ばれます。

ノート

コメントで述べたように、変数に のような特殊文字が含まれていないことがわかっている場合にのみ、これを使用する必要があります*

于 2012-11-07T21:34:55.620 に答える
0

シェルは、スペースを折りたたむような単純な処理であっても、大規模なデータ処理を行うようには実際には設定されていません。しかし、ここでは使用せずに解決策がありますsed

VAR="    Eget ac vel volutpat      dic  tumst   est dui      adipiscing  "
VAR=$(echo $VAR)

このコードは、VAR を元の var の折りたたまれたバージョンに設定します。これは、次を実行することで確認できます。

echo "$VAR"

結果:

Eget ac vel volutpat dic tumst est dui adipiscing
于 2012-11-07T21:54:07.930 に答える