linux - 在 shell 脚本中,如何在开始数字之前获取字符串中的所有可用字符
问题描述
在 shell 脚本中,如何在开始数字之前获取字符串中的所有可用字符。
字符串是 a="aaa-bbbb-19.81" 或者它可能是 "aaa-19.81"
我们需要在说明数字之前获取所有字符
解决方案
我会为此使用一个简单的 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'
推荐阅读
- java - 快速排序稳定性演示
- ffmpeg - 如何在混合视频流时设置 sample_aspect_ratio?
- laravel - Laravel 我可以在资源控制器上添加两个更新方法吗
- reactjs - How to test condition with Jest in React-Native app
- python - Pandas:基于两个列值创建一个新列
- android - RxJava - fetch every item on the list and emits one-by-one (any order)
- python - No module named 'encodings' (Python3.5 - Raspbian)
- python - 从 pandas 数据框的列中选择前 50% 的百分比名称
- javascript - JQuery ajax 表单提交返回文件给出未定义的错误响应
- javascript - 将多个页面中的多个输入按钮组合成单个 html 页面上的单个按钮