如果你有以下字符串,你会如何将它们减少到前两位?
FOO='1.2.3'
BAR='4.5.6.7x'
期望的输出
FOO='1.2'
BAR='4.5'
这个sed表达式与我想要的完全相反。
echo $FOO | sed 's/^[0-9]\+.[0-9]//g'
.3
我怎么能反转这个sed表达式?
答案 0 :(得分:3)
$ echo $BAR | sed -r 's/([0-9]+\.[0-9]+).*/\1/'
4.5
$ echo $FOO | sed -r 's/([0-9]+\.[0-9]+).*/\1/'
1.2
([0-9]+\.[0-9]+)
与前两部分匹配,例如1.2
。保存在捕获组1中,\1
.*
与其他
答案 1 :(得分:1)
如果您想尝试除regex
sed
的解决方案
echo $BAR | awk -F. '{print $1 FS $2}'
4.5
答案 2 :(得分:1)
使用bash内置命令:
BAR='4.5.6.7x'
IFS="." set -- $BAR
echo $1.$2
输出:
4.5
答案 3 :(得分:1)
您可以使用Shell Parameter Expansion和Arrays创建这样的函数来获取它:
f() {
numbers=( ${1//./ } )
echo ${numbers[0]}.${numbers[1]}
}
或没有数组:
f() {
TMP=${1#*.}
echo ${1%%.*}.${TMP%%.*}
}
$ FOO='1.2.3'
$ BAR='4.5.6.7x'
$ f $FOO
1.2
$ f $BAR
4.5