我有以下場景:
- 場景一
foo_bar = ["123", "456", "789"]
- 場景二
foo_bar = [
"123",
"456",
"789"
]
- 場景3
variable "foo_bar" {
type = list(string)
default = ["123", "456", "789"]
}
所以我試圖找出我怎么能與列印sed是在括號內的物品foo_bar會計scenario 2這是一個多
所以這里的結果匹配將是
場景一
"123", "456", "789"
場景二
"123",
"456",
"789"
場景3
"123", "456", "789"
如果是
not_foo_bar = [
"123",
"456",
"789"
]
這應該不匹配,只匹配foo_bar
這是我迄今為止嘗試過的
sed -e '1,/foo_bar/d' -e '/]/,$d' test.tf
和這個
sed -n 's/.*\foo_bar\(.*\)\].*/\1/p' test.tf
uj5u.com熱心網友回復:
這是一口,但它是 POSIXsed并且有效。
sed -Ene \
'# scenario 1
s/(([^[:alnum:]_]|^)foo_bar[^[:alnum:]_][[:space:]]*=[[:space:]]*\[)([^]] )(\]$)/\3/p
# scenario 2 and 3
/([^[:alnum:]_]|^)foo_bar[^[:alnum:]_][[:space:]]*=?[[:space:]]*[[{][[:space:]]*$/,/^[]}]$/ {
//!p
s/(([^[:alnum:]_]|^)default[^[:alnum:]_][[:space:]]*=[[:space:]]*\[)([^]] )(\]$)/\3/p
}' |
# filter out unwanted lines from scenario 3 ("type =")
sed -n '/^[[:space:]]*"/p'
我無法在一個sed.
第一行的第一行和最后一行sed是相同的命令(使用default代替foobar)。
編輯:萬一它混淆了某人,我錯誤地留在了最后一個[[:space:]]*,在第二個非常長的正則運算式中。我不會編輯它,但它不是重要的,也不是一致的 - 我不允許在其他模式中的行尾有任何尾隨空格。
uj5u.com熱心網友回復:
這可能對你有用(GNU sed):
sed -En '/foo_bar/{:a;/.*\[([^]]*)\].*/!{N;ba};s//\1/p}' file
關閉隱式列印并打開擴展 regexp -nE。
模式匹配foo_bar,然后收集下一個[和之間的行]并列印結果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/346500.html
下一篇:宣告-a/-A矩陣(Bash)
