如何在Bash shell中替换dot?

时间:2010-12-19 08:56:43

标签: bash shell string awk

我想做这样的事情:

echo "abc edg.txt" | awk -F. '{print $0"---"$1}'

我希望结果应该是:

  

abc edg --- txt

但事实证明是:

  

abc edg.txt --- abc edg

导致此行为的原因是什么,以及如何修复代码以生成我期望的输出?

4 个答案:

答案 0 :(得分:10)

如果您只想更换点:

var="abc edg.txt"
echo ${var/./---}

答案 1 :(得分:9)

在awk中,$0评估整个记录,字段索引是从一开始的。

您可能想要这样做:

$ echo "abc edg.txt" | awk -F. '{print $1"---"$2}'
abc edg---txt

答案 2 :(得分:3)

Frédéric Hamidi's answer修复了awk的问题,但是由于您询问了如何在Bash shell中按点拆分字符串,所以这里有一个答案就是这样做,而不是诉诸{{1} }:

awk

如果您只想拆分 last ',那就更容易了。在字符串中:

$ foo="abc edg.txt" ; IFS=. ; a=($foo) ; echo ${a[0]}---${a[1]}
abc edg---txt

答案 3 :(得分:2)

Awk很棒,但还有其他方法可以替代。

使用sed,您可以获得所有点,而不仅仅是第一个点。

echo "abc edg.txt" | sed 's/\./~~/g'

出:abc edg~~txt

表达式sed 's/\./~~/g'相当于“全局替换\.(点)~~。”

variable="abc here.is.more.dot-separated text"
echo ${variable}| sed 's/\./~~/g'

出:abc here~~is~~more~~dot-separated text