我尝试捕获这些字符串块,并使用regexp和sed对它们进行注解。每个块用空格分隔:
some text here
some text here
AppServer1:
name: ${AppServer1.name}
ip: ${AppServer1.ip}
some text here
some text here
AppServer2:
name: ${AppServer1.name}
ip: ${AppServer1.ip}
some text here
some text here
字符串
我尝试使用这个regexp:
sed E '/./{H;1h;$!d} ; x ; s/[^\$AppServer1](AppServer1)/#\1/gi'
型
但结果是:
#AppServer1:
name: $#{AppServer1.name}
ip: $#{AppServer1.ip}
型
我在这里遗漏了什么来注解完整的字符串,如下所示?
#AppServer1:
# name: ${AppServer1.name}
# ip: ${AppServer1.ip}
型
3条答案
按热度按时间vuv7lop31#
使用
gnu-sed
,你可以这样做:字符串
详情:
/^AppServer1/I
:搜索AppServer1
不区分大小写{
:块启动:a
:制作标签a
/^[[:blank:]]*$/!
如果一行不是空行{s/.*/#&/; n; ba;}
:在每一行前面加上#
,读取下一行并后藤标签a
}
:块结束使用
awk
,你可以做到这一点:型
insrf1ej2#
一个更简单的
sed
解决方案可能是这样的,如果你同意最后一个空行也被注解的话:个字符
它使用
sed
范围模式,用逗号表示(,
)。范围的开始是/^AppServer1:/
,即,从(^
)和AppServer1:
。范围的结尾是一个空行或只包含空白字符的行:/^[[:space:]]*$/
,其中^
:行的开头;[[:space:]]*
:零个或多个(*
)空白字符([[:space:]]
);$
:行尾。接下来是[s] substitution命令-
s/^/# /
-它将匹配范围内所有行(包括end)的行^
的开始替换为序列#
。如果你想要一个不区分大小写的匹配,你需要GNU
sed
。在这种情况下,你可以将I
标志添加到范围开始模式。但是这个标志在macOSsed
上不可用。biswetbf3#
假设输入中看起来为空的行实际上是空的,你可以在每个Unix机器上的任何shell中使用任何awk来做到这一点:
字符串