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

您不需要为此生成子shell。只需使用 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

Shell 并没有真正设置为进行海量数据处理,甚至处理像折叠空间这样简单的处理。但这是一个不使用的解决方案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 回答