我在bash中有一个字符串,如下所示:
123.123123
123.1
123
我想要这个结果:
123.12
123.1
123
那么如何将每一行修剪为指定的字符+最多2个附加字符?
答案 0 :(得分:1)
试试这段代码:
#!/bin/bash
string="1234.12345"
pos=`expr index $string .`
echo $pos
substring= expr substr $string 1 $((pos+2))
echo $substring
通过这种方式,您将获得带.
的点expr index $string
的位置,并获得带有expr substr $string 1 $((pos+2))
的子串(从char 1到char $ pos + 2的子串)。
有用的链接:http://tldp.org/LDP/abs/html/string-manipulation.html
编辑: 可能正在使用正则表达式作为@Martin Valgur提出的要短得多:
string="1234.12345"
substring= expr "$string" : '\(.*[.]..\)'
echo $substring
答案 1 :(得分:1)
根据您的更新要求,您可以使用此sed
nodejs
sed 's/\(\.[^ ]\?[^ ]\?\)[^ ]*/\1/g'
答案 2 :(得分:0)
您可以使用expr
的正则表达式功能:
expr "$string" : '\(.*[.]..\)'
答案 3 :(得分:0)
在bash中,使用字符串索引。您可以将字符串int拆分为您想要的每个字符。只需选择要捕获的索引即可。例如:
myvar=123.123123 123.1 123
echo ${myvar:0:6} # 123.12
echo ${myvar:11:5} # 123.1
echo ${myvar:17:3} # 123
您可以轻松地将其组合为:
echo "${myvar:0:6} echo ${myvar:11:5} echo ${myvar:17:3}"
# result: 123.12 123.1 123
或从字符串的末尾开始:
echo ${myvar: -3} # 123
注意:要从字符串的 end 索引,您要么在负数之前留一个空格,要么将其放在parens中(例如${myvar: -2}
= { {1}}或23
= ${myvar:(-3)}
)