首页 > 解决方案 > 在 shell 脚本中,如何在开始数字之前获取字符串中的所有可用字符

问题描述

在 shell 脚本中,如何在开始数字之前获取字符串中的所有可用字符。

字符串是 a="aaa-bbbb-19.81" 或者它可能是 "aaa-19.81"

我们需要在说明数字之前获取所有字符

标签: linux

解决方案


我会为此使用一个简单的 Perl 正则表达式。例如,这采用给定的参数,并删除第一个数字及其后的任何内容:

$ perl -le '$_=shift; s/\d.*//; print' "aaa-bbbb-19.81"
aaa-bbbb-

如果它需要包含在 shell 脚本中,它可能是这样的:

a="aaa-bbbb-19.81"
b="aaa-19.81"

anew=$(perl -e '$_=shift; s/\d.*//; print' "$a")
bnew=$(perl -e '$_=shift; s/\d.*//; print' "$b")

echo "$a => $anew"
echo "$b => $bnew"

输出:

aaa-bbbb-19.81 => aaa-bbbb-
aaa-19.81 => aaa-

如果您还希望第二个变量中的第二部分,您可以使用一个正则表达式,它首先分别捕获任何“非数字” (\D*),然后是一个 digit + the rest (\d.*)

在 shell 脚本中,可能是:

a="aaa-bbbb-19.81"
b="aaa-19.81"

read -r a1 a2 < <(perl -le '$_=shift; /(\D*)(\d.*)/ && print "$1 $2"' "$a")
read -r b1 b2 < <(perl -le '$_=shift; /(\D*)(\d.*)/ && print "$1 $2"' "$b")

echo "a1='$a1',  a2='$a2'"
echo "b1='$b1',  b2='$b2'"

输出:

a1='aaa-bbbb-',  a2='19.81'
b1='aaa-',  b2='19.81'

推荐阅读