如何grep字符串变量的内容?

Ash*_*ame 4 grep

如何在变量中执行grep?我已经将 wget 输出存储在一个变量中,我需要从中提取一些字符串。就像变量的内容是

upgrade http://wordpress.org/download/ http://wordpress.org/wordpress-3.0.5.zip 3.0.5 en_US 4.3 4.1.2
Run Code Online (Sandbox Code Playgroud)

我需要检查字符串是否包含单词upgrade,所以我可以做一个简单的 grep 然后检查它的退出状态$?并继续。

我怎样才能得到3.0.5实际上是第四个字的值?

以及如何在变量中实际 grep ?

Oli*_*Oli 8

而不是 grepping,也许只是使用cut. 它会比运行完整的正则表达式快得多。

STRING="upgrade http://wordpress.org/download/ http://wordpress.org/wordpress-3.0.5.zip 3.0.5 en_US 4.3 4.1.2"
echo "$STRING" | cut -d" " -f4
Run Code Online (Sandbox Code Playgroud)

输出: 3.0.5

不过,这可能更健壮一些(从 zip url 中获取版本):

echo "$STRING" | sed -n -e 's/.*wordpress-\(.*\)\.zip.*/\1/p'
Run Code Online (Sandbox Code Playgroud)

如果您想将其存储回 bash 变量中,只需将其用引号和反引号括起来即可。反引号部分将首先执行,将其保留为字符串。

RESULT="`echo "$STRING" | sed -n -e 's/.*wordpress-\(.*\)\.zip.*/\1/p'`"
Run Code Online (Sandbox Code Playgroud)

因此,就剥离这个(根据您的评论)upgrade在开头寻找:

STRING="upgrade http://wordpress.org/download/ http://wordpress.org/wordpress-3.0.5.zip 3.0.5 en_US 4.3 4.1.2"

if [[ $STRING == upgrade* ]]; then
    VERSION="`echo "$STRING" | sed -n -e 's/.*wordpress-\(.*\)\.zip.*/\1/p'`"
    # do something else now
else
    # do something if this isn't an upgrade (optional)
fi
Run Code Online (Sandbox Code Playgroud)