如何在变量中执行 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