[英]Extracting group from regex in shell script using grep
我想提取通过shell脚本运行的命令的输出变量,但是我无法做到。 我使用grep
命令相同。 请帮助我获取所需的变量输出。
x=$(pwd)
pw=$(grep '\(.*\)/bin' $x)
echo "extracted is:"
echo $pw
pwd
命令的输出是/opt/abc/bin/
,我只希望它的/root/abc
部分。 提前致谢。
使用dirname
获取路径,而不是路径的最后一段。
您可以使用:
x=$(pwd)
pw=`dirname $x`
echo $pw
或者简单地:
pw=`dirname $(pwd)`
echo $pw
您正在做的所有事情都可以在单个echo
:
echo "${PWD%/*}"
$PWD
变量代表当前目录和%/*
删除最后/
和最后的后部分/
。
对于您的情况,它将输出: /root/abc
grep
的第二个(以及任何后续)参数是要搜索的文件的名称,而不是要执行匹配的字符串。
此外, grep
打印匹配的行或(使用-o
)匹配的字符串,而不捕获括号。 为此,您需要其他工具。
最小修复您的代码将是
x=$(pwd)
pw=$(printf '%s\n' "$x" | sed 's%\(.*\)/bin.*%\1%')
(如果只关心Bash,而不关心其他shell,则可以在没有显式管道的情况下进行sed ... <<<"$x"
;语法也更令人满意。)
但是,当然,shell具有内置的基本字符串操作功能。
pw=${x%/bin*}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.