[英]How do I return just an individual string in bash?
我有一個包含多行的文本文件,但是我知道一行中有以下內容
name="some_string" value="some_string"
我知道我可以僅通過cat file.txt|grep "value=\\".*\\""
進入這一行 ,但是我無法弄清楚僅僅是返回括號內的內容。 我認為grep只能解決問題
使用GNU grep
的-P
(PCRE)選項和-o
選項僅打印匹配的部分。
grep -oP '(?<=value=")[^"]+' file
如果您的正則表達式包含分組運算符,則可以使用=~
和BASH_REMATCH
:
regex='value="([^"]+)"'
[[ $string =~ $regex ]] && result=${BASH_REMATCH[1]}
這適用於沒有GNU grep的系統(如MacOS)。
與僅使用POSIX grep的系統類似的另一種方法是使用參數擴展在本地bash中過濾grep的輸出:
while read -r; do
value=${REPLY#*'value="'}
value=${value%'"'*}
echo "$value"
done < <(grep -e 'name="foo"' file)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.