如何在变量中执行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 ?
而不是 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)