使用grep从shell脚本中的regex中提取组

时间:2015-10-08 06:19:24

标签: regex linux shell grep

我想在变量中提取通过shell脚本运行的命令的输出,但我无法做到。我正在使用grep命令。请帮我在变量中获得所需的输出。

x=$(pwd)
pw=$(grep '\(.*\)/bin' $x)
echo "extracted is:"
echo $pw

pwd命令的输出为/opt/abc/bin/,我只想要/root/abc部分。提前谢谢。

4 个答案:

答案 0 :(得分:1)

使用dirname获取路径,而不是路径的最后一段。

答案 1 :(得分:1)

您可以使用:

x=$(pwd)
pw=`dirname $x`
echo $pw

或者简单地说:

pw=`dirname $(pwd)`
echo $pw

答案 2 :(得分:1)

您所做的所有事情都可以在一个echo中完成:

echo "${PWD%/*}"

$PWD变量代表当前目录,%/*删除上一个/,并在最后/后删除。

对于您的情况,它将输出:/root/abc

答案 3 :(得分:0)

grep的第二个(以及任何后续)参数是要搜索的文件的名称,而不是要执行匹配的字符串。

此外,grep打印匹配的行或(使用-o)匹配的字符串,而不是所捕获的括号。为此,您需要一个不同的工具。

最低限度地修复您的代码

x=$(pwd)
pw=$(printf '%s\n' "$x" | sed 's%\(.*\)/bin.*%\1%')

(如果你只关心Bash,而不关心其他shell,你可以在没有显式管道的情况下做sed ... <<<"$x";语法也更令人满意。)

但是,当然,shell内置了基本的字符串操作函数。

pw=${x%/bin*}