我想做这样的事情:
echo "abc edg.txt" | awk -F. '{print $0"---"$1}'
我希望结果应该是:
abc edg --- txt
但事实证明是:
abc edg.txt --- abc edg
导致此行为的原因是什么,以及如何修复代码以生成我期望的输出?
答案 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