BASH:如何在指定字符+2个字符后拆分字符串?

时间:2016-01-11 13:05:24

标签: bash

我在bash中有一个字符串,如下所示:

123.123123
123.1
123

我想要这个结果:

123.12
123.1
123

那么如何将每一行修剪为指定的字符+最多2个附加字符?

4 个答案:

答案 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)}