BASH:如何在指定字符+;2个字符?
我在bash中有一个字符串,如下所示:BASH:如何在指定字符+;2个字符?,bash,Bash,我在bash中有一个字符串,如下所示: 123.123123 123.1 123 我想要这个结果: 123.12 123.1 123 因此,如何将每行修剪为指定字符+最多2个额外字符?您可以使用expr的正则表达式功能来实现此目的: expr "$string" : '\(.*[.]..\)' 请尝试以下代码: #!/bin/bash string="1234.12345" pos=`expr index $string .` echo $pos substring= expr sub
123.123123
123.1
123
我想要这个结果:
123.12
123.1
123
因此,如何将每行修剪为指定字符+最多2个额外字符?您可以使用
expr
的正则表达式功能来实现此目的:
expr "$string" : '\(.*[.]..\)'
请尝试以下代码:
#!/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的子字符串)获得子字符串
有用链接:
编辑:
可能使用@Martin Valgur建议的正则表达式要短得多:
string="1234.12345"
substring= expr "$string" : '\(.*[.]..\)'
echo $substring
在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
注意:要从字符串末尾开始编制索引,您可以在负数之前留一个空格或将其放在括号中(例如
${myvar:-2}
=23
,或${myvar:-3}
=123
)对于更新的需求,您可以使用此sed
sed 's/\(\.[^ ]\?[^ ]\?\)[^ ]*/\1/g'
例子
指定了什么字符
grep-o.“*\…”
?您指定了哪个字符?@TomFenech根据输入和输出判断,我假设
谢谢,我编辑了这个问题。字符串中的数字是整数,点后只有一位数字。如果你要向下投票,请诚实地指出你认为这篇文章有什么问题?我的猜测是它使用硬编码长度,不允许你指定字符。最初的问题是我如何像这样拆分这个字符串。。。。。我现在明白了,他想要一个算法,而不仅仅是我如何分割它:)这对echo 123.123123 | sed的/\(\.[^]\?[^]\?[^]\?\)[^]*/\1/g'@IAN2TEDV不管用……你说得对,我认为它应该产生123.123
,我的坏!当我可以的时候提高投票率:)@ian2tedv你是什么意思?
echo 123.123123 123.1 123 | sed 's/\(\.[^ ]\?[^ ]\?\)[^ ]*/\1/g'
123.12 123.1 123