嘗試在具有以下值的路徑變數之間提取文本,
path_value="path/to/value/src"
我只想value從上面的變數中提取并稍后在我的腳本中使用它。我知道可以使用grep,或者awk但我想知道如何使用sed
所以我嘗試了這個
service_name=$(echo $path_value | sed -e 's/path/to/(.*\)/.*/\1/')
但我得到了這個錯誤bad flag in substitute command: '('
您能否建議什么是正確的正則運算式來實作我想要做的事情?
uj5u.com熱心網友回復:
使用引數替換并消除子流程呼叫:
$ path_value="path/to/value/src"
$ tempx="${path_value%/*}"
$ echo "${tempx}"
path/to/value
$ service_name="${tempx##*/}"
$ echo "${service_name}"
value
執行bash/regex比較并從陣列中檢索所需的專案BASH_REMATCH[](也消除子行程呼叫):
$ regex='.*/([^/] )/([^/] )$'
$ [[ "${path_value}" =~ $regex ]] && service_name="${BASH_REMATCH[1]}"
$ echo "${service_name}"
# fwiw, contents of the BASH_REMATCH[] array:
$ typeset -p BASH_REMATCH
declare -ar BASH_REMATCH=([0]="path/to/value/src" [1]="value" [2]="src")
uj5u.com熱心網友回復:
您可以使用
#!/bin/bash
path_value="path/to/value/src"
service_name=$(echo "$path_value" | sed 's~path/to/\([^/]*\)/.*~\1~')
echo "$service_name"
# => value
請參閱在線演示。
注意我替換了/正則運算式分隔符,~以避免/在模式內轉義字符。
捕獲括號都必須在 POSIX BRE 正則運算式中進行轉義。
該[^/]*部分僅匹配 . 以外的零個或多個字符/。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/469187.html
上一篇:jq選擇所選路徑的子集
