Bash字符串处理(与Java对照) - 28.去除前后空白

Bash字符串处理(与Java对照) - 28.去除前后空白

In Java

String     trim()
          返回字符串的副本,忽略前导空白和尾部空白。

 

In Bash

使用echo命令去除串中的空白

echo $STR

注意 $STR 不要带引号。因为 $STR 展开后,会作为 echo 的参数。那么 echo 在处理参数的时候,自然会忽略首尾的空格。不过此种方法有个小问题,那就是 echo 输出的结果,会将字符串中间的连续空格变成一个空格。例如 $STR 为 "   any    string    " 的话,那么输出将是 "any string"。

 

[root@jfht ~]# STR="  any   string   "
[root@jfht ~]# echo $STR
any string
[root@jfht ~]# echo [$STR]
[ any string ]

 

使用grep命令去除前后空白

echo "$STR" | grep -o "[^ ]\+\( \+[^ ]\+\)*"

用 "[^ ]+( +[^ ]+)*" 去匹配除首尾空格外的部分,然后 -o 仅输出匹配的部分,这样就达到去除首尾空格的效果了。

man grep 写道
       -o, --only-matching
              Show only the part of a matching line that matches PATTERN.
 

 

[root@jfht ~]# echo "$STR" | grep -o "[^ ]\+\( \+[^ ]\+\)*"
any   string

 

使用expr match去除前后的空白

错误:expr match "$STR" "[[:space:]]*\(.*\)[[:space:]]*"

 

[root@jfht ~]# expr match "$STR" "[[:space:]]*\(.*\)[[:space:]]*"
any   string 

 

但是下面的情况表明这个方法不可行。因为正则表达式是贪婪匹配的。

[root@jfht ~]# STR="
>   123   
> 456    6
>
>
> "
[root@jfht ~]# echo $STR
123 456 6
[root@jfht ~]# echo "$STR"

  123   
456    6

 

[root@jfht ~]# expr match "$STR" "[[:space:]]*\(.*\)[[:space:]]*"
123
456   6



[root@jfht ~]#

 

正确:expr match "$STR" "[[:space:]]*\(.*[^[:space:]]\+\)[[:space:]]*"

[root@jfht ~]# expr match "$STR" "[[:space:]]*\(.*[^[:space:]]\+\)[[:space:]]*"

123
456   6
[root@jfht ~]#

 

 

本文链接:http://codingstandards.iteye.com/blog/1164914   (转载请注明出处)

返回目录:Java程序员的Bash实用指南系列之字符串处理(目录) 

上节内容:Bash字符串处理(与Java对照) - 27.转换大小写

下节内容:Bash字符串处理(与Java对照) - 29.字符串翻转(字符串反转、字符串反序)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值