如何在shell中保留字符串中的数字?

如何在shell中保留字符串中的数字?,shell,Shell,我在下面试 a = device.1.2 echo$a应打印1.2 尝试使用sed的//[a-z]//g'a首先,请确保您的shell变量在赋值时没有空格,因此如下所示:a=“device.1.2”。有了你们展示的样品,你们能试一下吗 用参数替换法:我们不需要使用外部程序来获取值 echo "${a#*.}" 或者使用sed:因为OP正在尝试sed,所以在这里添加了一个sed解决方案,这个漂亮的命令是由Benjamin发出的,请参见注释 echo "$a&q

我在下面试

a = device.1.2
echo$a
应打印1.2


尝试使用sed的//[a-z]//g'a

首先,请确保您的shell变量在赋值时没有空格,因此如下所示:
a=“device.1.2”
。有了你们展示的样品,你们能试一下吗

用参数替换法:我们不需要使用外部程序来获取值

echo "${a#*.}"


或者使用
sed
:因为OP正在尝试
sed
,所以在这里添加了一个
sed
解决方案,这个漂亮的命令是由Benjamin发出的,请参见注释

echo "$a" | sed 's/^[^.]*\.//'

首先,请确保您的shell变量在赋值时没有空格,所以如下所示:
a=“device.1.2”
。有了你们展示的样品,你们能试一下吗

用参数替换法:我们不需要使用外部程序来获取值

echo "${a#*.}"


或者使用
sed
:因为OP正在尝试
sed
,所以在这里添加了一个
sed
解决方案,这个漂亮的命令是由Benjamin发出的,请参见注释

echo "$a" | sed 's/^[^.]*\.//'

更简单的sed替换:
s/^[^.]*\/
可能
sed的/[^-+.0-9]//g'
删除除数字、点和加号或减号以外的所有字符。请注意,
-
必须是“first”(如图所示)或“last”。目前还不清楚这些数字有多普遍,最终可能会出现一些不需要的字符;调整列表以适应实际需求。它不能很好地处理指数表示法(
-3.14159E-23
)(也不能处理十六进制
数据.0x03grid
);处理这些需要相当精细的技术。没有理由使用sed替换字符集,bash可以内置这样做<代码>${a//[^[:digit::][.]/}@CharlesDuffy,当然,先生,谢谢你(我也添加了参数扩展答案,因为OP使用了
sed
,所以我根据Benjamin的建议添加了它),我可以删除答案,你真的应该发布这个好答案。@乔纳森·莱夫勒,谢谢你,先生,还有一个不错的变体,干杯。@CharlesDuffy:这假设Bash或与Bash兼容(足够)的shell。问号是简单的,因此符号可能不可用。但是字符类表示法很有用。它在macOS 10.14.6和Bash 3.2.57(经苹果公司修订)上运行(有点让我惊讶),因此它可能在Bash的所有合理版本上都很好。更简单的sed替换:
s/^[^.]*./
可能
sed's/[^-+.0-9]//g'
删除除数字、点和加号或减号以外的所有字符。请注意,
-
必须是“first”(如图所示)或“last”。目前还不清楚这些数字有多普遍,最终可能会出现一些不需要的字符;调整列表以适应实际需求。它不能很好地处理指数表示法(
-3.14159E-23
)(也不能处理十六进制
数据.0x03grid
);处理这些需要相当精细的技术。没有理由使用sed替换字符集,bash可以内置这样做<代码>${a//[^[:digit::][.]/}@CharlesDuffy,当然,先生,谢谢你(我也添加了参数扩展答案,因为OP使用了
sed
,所以我根据Benjamin的建议添加了它),我可以删除答案,你真的应该发布这个好答案。@乔纳森·莱夫勒,谢谢你,先生,还有一个不错的变体,干杯。@CharlesDuffy:这假设Bash或与Bash兼容(足够)的shell。问号是简单的,因此符号可能不可用。但是字符类表示法很有用。它在macOS 10.14.6和Bash 3.2.57(经苹果修订)上运行(有点出乎我的意料),因此它可能在Bash.BTW的所有合理版本上都很好,请注意,
echo$a
本身就有缺陷;始终
回显“$a”
。请注意,
echo$a
本身就有bug;始终
回显“$a”
。看见