仅当它与 vi 编辑器中的字符串匹配时才查找和替换
Find and replace only if it matches a string in vi editor
我有一个大文件:
.
..
...
{
"term": "Allow A to B",
"to_zone" : ["inside"],
"from_zone" : ["sys"],
"source" : ["10.10.10.10/32"],
"destination": ["20.20.20.20/32","30.30.30.30/32"],
"source_user" : ["any"],
"category" : ["any"],
"application" : ["any"],
"service" : ["application-default"],
"source_hip" : ["any"],
"destination_hip" : ["any"],
"tag" : ["con"],
"action" : "allow",
"rule_type" : ["universal"],
"group_tag" : ["con"],
"profile_setting" : "alert-only"
},
...
..
.
我只想删除方括号 '[]' 并仅在匹配 'group_tag'.
行时保留引号
预期结果为:
.
..
...
{
"term": "Allow A to B",
"to_zone" : ["inside"],
"from_zone" : ["bdd"],
"source" : ["10.10.10.10/32"],
"destination": ["20.20.20.20/32","30.30.30.30/32"],
"source_user" : ["any"],
"category" : ["any"],
"application" : ["any"],
"service" : ["application-default"],
"source_hip" : ["any"],
"destination_hip" : ["any"],
"tag" : ["con"],
"action" : "allow",
"rule_type" : ["universal"],
"group_tag" : "con",
"profile_setting" : "alert-only"
},
...
..
.
如何在 vi 编辑器中完成此操作?
您可以对匹配模式的行应用替换:
:/group_tag/s/[\[\]]//g
[\[\]]
匹配文字左方括号或右方括号。
要一次获得所有这些行,我认为您必须使用这种方法:
:%s/\(^.*group_tag" : \)\[\(.*\)\]\(.*\)//g
这是匹配整行,但要记住(使用捕获组:\(
和 \)
) 除方括号外的所有内容。然后我们用
只有记住的捕获组。
但也请参阅 this 中的方法
问题.
我有一个大文件:
.
..
...
{
"term": "Allow A to B",
"to_zone" : ["inside"],
"from_zone" : ["sys"],
"source" : ["10.10.10.10/32"],
"destination": ["20.20.20.20/32","30.30.30.30/32"],
"source_user" : ["any"],
"category" : ["any"],
"application" : ["any"],
"service" : ["application-default"],
"source_hip" : ["any"],
"destination_hip" : ["any"],
"tag" : ["con"],
"action" : "allow",
"rule_type" : ["universal"],
"group_tag" : ["con"],
"profile_setting" : "alert-only"
},
...
..
.
我只想删除方括号 '[]' 并仅在匹配 'group_tag'.
行时保留引号预期结果为:
.
..
...
{
"term": "Allow A to B",
"to_zone" : ["inside"],
"from_zone" : ["bdd"],
"source" : ["10.10.10.10/32"],
"destination": ["20.20.20.20/32","30.30.30.30/32"],
"source_user" : ["any"],
"category" : ["any"],
"application" : ["any"],
"service" : ["application-default"],
"source_hip" : ["any"],
"destination_hip" : ["any"],
"tag" : ["con"],
"action" : "allow",
"rule_type" : ["universal"],
"group_tag" : "con",
"profile_setting" : "alert-only"
},
...
..
.
如何在 vi 编辑器中完成此操作?
您可以对匹配模式的行应用替换:
:/group_tag/s/[\[\]]//g
[\[\]]
匹配文字左方括号或右方括号。
要一次获得所有这些行,我认为您必须使用这种方法:
:%s/\(^.*group_tag" : \)\[\(.*\)\]\(.*\)//g
这是匹配整行,但要记住(使用捕获组:\(
和 \)
) 除方括号外的所有内容。然后我们用
只有记住的捕获组。
但也请参阅 this 中的方法 问题.