簡體   English   中英

使用grep從Shell腳本中的正則表達式中提取組

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM