[英]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.