我正在尝试找到一种方法来找到符合条件的文本块:
- 块以“google = {”开头
- 块以找到下一个“}”字符结束 - 忽略其他所有内容。
例子
google = {
block of text with some var = "value" assignments
usually 1-3 lines of code here.
often includes special chars like / " > < =
}
替换至特定块:
google = {
source = "hashicorp/google"
version = ">= 4.0.0, <5.0.0"
}
对于所有子目录(多个文件)中名为versions.tf的所有文件。
我能够使用 sed 为单个文件找到特定的块:
$ sed -e '/google = {/,/}/!d' versions.tf
google = {
source = "hashicorp/google"
version = ">= 3.32, <4.0.0"
}
但是我很难修改它以递归方式工作并用其他固定值替换找到的块。
使用 perl 的其他方法似乎可以解决单个文件的问题:
perl -i~ -0777 -pe 's/google = \{[^\}]+"/google = {\n source = \"hashicorp\/google\"\n version = \">= 4.0.0, <5.0.0\"\n }/g' versions.tf
但这不是最漂亮的解决方案;)