Unix Bash中为逗号分隔字符串元素添加.done后缀的问题及空格修剪
解决逗号分隔字符串添加.done后缀及空格修剪问题
首先得说清楚你最初用tr命令为啥不行——tr是字符级替换,它只会把每个逗号替换成.done里的第一个字符(也就是.),所以才会得到AAAA.BBBB这种不符合预期的结果。
按照@Ravindra的思路,咱们可以用sed来实现正确的后缀添加:
echo "AAAA,BBBB" | sed 's/,/\.done /g; s/$/\.done/'
这个命令分两步:
- 把每个逗号替换成
.done(带空格) - 在字符串末尾再补上一个
.done,这样就能得到你想要的AAAA.done BBBB.done
接下来处理空格修剪的问题——如果你的原始字符串里逗号前后有多余空格(比如"AAAA , BBBB"),上面的命令会保留这些空格,导致结果变成AAAA .done BBBB.done这种不整洁的样子。咱们可以在替换后缀前先清理掉逗号周围的空格:
echo "AAAA , BBBB" | sed 's/ *, */,/g; s/,/\.done /g; s/$/\.done/'
第一步's/ *, */,/g'的作用是把逗号前后任意数量的空格都去掉,统一成干净的逗号分隔,之后再做后缀替换就没问题了。
如果你觉得sed的写法有点绕,也可以用awk来实现,逻辑更直观:
echo "AAAA , BBBB" | awk -F', *' '{for(i=1;i<=NF;i++) printf "%s.done ", $i} END{print ""}' | sed 's/ $//'
- 用
', *'(逗号加任意空格)作为字段分隔符,自动忽略逗号前后的空格 - 循环每个字段,输出
字段.done - 最后用
sed去掉末尾多余的空格
这样不管原始字符串有没有空格,都能输出整洁的AAAA.done BBBB.done结果啦。
内容的提问来源于stack exchange,提问作者XING
相关产品推荐
相关产品推荐

