如何在字符串变量的内容中进行 grep?

如何在字符串变量的内容中进行 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

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

3.0.5我怎样才能获得实际上是第四个单词的值?

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

答案1

也许不用 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

输出:3.0.5

但这可能更强大一些(从 zip url 中获取版本):

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

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

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

因此,就剥离这个(根据您的评论)以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

答案2

如果您只是寻找一个单词,您可以使用 for 循环。

STRING="如果可以的话请升级它"
对于 $STRING 中的 x;执行
   回显 $x
   如果 [ “$x” = '升级' ]; 然后
       找到回声
       y=$x
       休息
完毕
回显$y

如果升级总是在同一位置,您可以尝试数组分配。

声明-az
z=($字符串)
回显 ${z[0]}

答案3

除了您应该知道的总体问题之外,grep如果字符串包含多行并且您想找出包含某个单词的行,那么您也可以使用它。

例子:

STRING="Some lines
with the word one
and the word two"

使用 grep 查找包含单词“one”的行,使用 echo 并引用变量:

echo "$STRING" | grep one

相关内容