我有以下正则表达式,并希望将它们转换为bash模式。
itg='^[-+]?[0-9]*我正在尝试匹配数值。Integral Values 1 21 144 -17
Fixed point values 3.142 0.334 .345 -7.345 -0.34345
Floating point values 3.142E-2 43.234E+3 234.345e7我使用的是使用BRE或ERE的bash脚本。
fxp='^[-+]?[0-9]*[.,]?[0-9]+我正在尝试匹配数值。A1我使用的是使用D2或D3的bash脚本。
flp='^[-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?我正在尝试匹配数值。A1我使用的是使用D2或D3的bash脚本。我正在尝试匹配数值。
A1
我使用的是使用D2或D3的bash脚本。
发布于 2021-11-17 16:38:28
如果您的意思是将regexp转换为shell glob,请注意并非所有regexp运算符都可以转换为shell glob运算符。例如,regexp *没有标准的glob等效。
然而,一些shell扩展了glob操作符。在zsh中,只有在启用extendedglob选项时才是#。在ksh中,相当于x*的是*(x)。启用bash选项后,只支持ksh扩展运算符的子集:@(...)、?(...)、*(...)和+(...) (不支持反向引用、~(...)、\d、\s、{1,3}(...).)
ksh 93‘S printf内置可以通过其%P格式指令将扩展的regexp转换为ksh globs (%R做从ksh glob到(完全开放风味的)regexp的反向转换)。
如果幸运的话,您将能够在bash -O extglob中使用结果glob:
$ itg='^[-+]?[0-9]*在这里,您很幸运,它都是由bash -O extglob支持的regexp操作符。在任何情况下,如果要使用它进行输入验证,则需要将[0-9]更改为[0123456789]作为bash中的[0-9] (以及当今大多数常见的语言环境中的D24),匹配的字符比10 0123456789个字符多数百个。还请注意,您的itg regexp匹配-、+和空字符串,以及例如bash算术计算所占用的019等数字(作为无效的八进制数字)。还请注意,bash还可以与其[[ $string =~ $regexp ]]运算符进行扩展的regexp模式匹配,当然也可以调用任何可以进行regexp匹配的工具,如grep、perl、awk、sed或更高级的shell,如zsh或ksh93.毕竟,这就是shell的目的:运行命令。
$ fxp='^[-+]?[0-9]*[.,]?[0-9]+在这里,您很幸运,它都是由D21支持的regexp操作符。在任何情况下,如果要使用它进行输入验证,则需要将D22更改为D23作为bash中的D24 (以及当今大多数常见的语言环境中的D24),匹配的字符比10 0123456789个字符多数百个。还请注意,您的D25 regexp匹配D26、D27和空字符串,以及例如D29算术计算所占用的D28等数字(作为无效的八进制数字)。还请注意,D30还可以与其D31运算符进行扩展的regexp模式匹配,当然也可以调用任何可以进行regexp匹配的工具,如D32、D33、D34、D35或更高级的shell,如D36或D37.毕竟,这就是shell的目的:运行命令。
$ flp='^[-+]?[0-9]*[.,]?[0-9]+([eE][-+]?[0-9]+)?在这里,您很幸运,它都是由D21支持的regexp操作符。在任何情况下,如果要使用它进行输入验证,则需要将D22更改为D23作为bash中的D24 (以及当今大多数常见的语言环境中的D24),匹配的字符比10 0123456789个字符多数百个。还请注意,您的D25 regexp匹配D26、D27和空字符串,以及例如D29算术计算所占用的D28等数字(作为无效的八进制数字)。还请注意,D30还可以与其D31运算符进行扩展的regexp模式匹配,当然也可以调用任何可以进行regexp匹配的工具,如D32、D33、D34、D35或更高级的shell,如D36或D37.毕竟,这就是shell的目的:运行命令。
$ ksh -c 'printf "%P\n" "$@"' ksh "$itg" "$fxp" "$flp"
?([-+])*([0-9])
?([-+])*([0-9])?([.,])+([0-9])
?([-+])*([0-9])?([.,])+([0-9])?([eE]?([-+])+([0-9]))在这里,您很幸运,它都是由D21支持的regexp操作符。
在任何情况下,如果要使用它进行输入验证,则需要将D22更改为D23作为bash中的D24 (以及当今大多数常见的语言环境中的D24),匹配的字符比10 0123456789个字符多数百个。
还请注意,您的D25 regexp匹配D26、D27和空字符串,以及例如D29算术计算所占用的D28等数字(作为无效的八进制数字)。
还请注意,D30还可以与其D31运算符进行扩展的regexp模式匹配,当然也可以调用任何可以进行regexp匹配的工具,如D32、D33、D34、D35或更高级的shell,如D36或D37.毕竟,这就是shell的目的:运行命令。
https://unix.stackexchange.com/questions/677958
复制相似问题