yae*_*ael 5 linux bash regular-expression
在bash我做了以下。此if表达式将评估trueRedhat 版本是 7.5 还是 7.6。
if [[ ` cat /etc/redhat-release | awk '{print $7}' ` == "7.5" ]] || [[ ` cat /etc/redhat-release | awk '{print $7}' ` == "7.6" ]]
then
.
.
.
Run Code Online (Sandbox Code Playgroud)
我们可以用正则表达式以更优雅的方式做到这一点吗?
这是内容/etc/redhat-release:
cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.6 (Maipo)
Run Code Online (Sandbox Code Playgroud)
roa*_*ima 15
直接检查发布字符串要简单得多
if grep -q 'release 7\.[56] ' /etc/redhat-release
then ...
Run Code Online (Sandbox Code Playgroud)
该grep命令通过正则表达式匹配。的[56]原子火柴5或6,使图案以匹配7.5或7.6。由于.匹配任何字符,我用反斜杠对其进行了转义,以便它与文字点匹配。尾随空格确保匹配的版本字符串后面没有其他字符。
Gor*_*son 11
您可以使用bash的内置字符串匹配来做到这一点。请注意,这使用 glob(通配符)模式,而不是正则表达式。
if [[ $(cat /etc/redhat-release | awk '{print $7}') == 7.[56] ]]
Run Code Online (Sandbox Code Playgroud)
或者,我们消除了UUoC:
if [[ $(awk '{print $7}' /etc/redhat-release) == 7.[56] ]]
Run Code Online (Sandbox Code Playgroud)
或者...
if [[ $(cat /etc/redhat-release) == *" release 7."[56]" "* ]]
Run Code Online (Sandbox Code Playgroud)
甚至(感谢@kojiro)...
if [[ $(< /etc/redhat-release) == *" release 7."[56]" "* ]]
Run Code Online (Sandbox Code Playgroud)
(注意开头和结尾需要通配符才能匹配整行。数字后面的引号空格是为了确保它不会意外匹配“7.50”。)
或者,如果您真的想使用正则表达式,请使用=~并切换到 RE 语法:
if [[ $(< /etc/redhat-release) =~ " release 7."[56]" " ]]
Run Code Online (Sandbox Code Playgroud)
(请注意,引号中的部分将按字面匹配,因此.不需要转义或括号(只要您不启用bash31兼容性)。默认情况下不锚定 RE 匹配,因此您不需要任何像最后一个一样的结尾。)