awk - 如何在 awk 脚本中进行模式匹配后打印某些内容?
问题描述
我的输入文件数据
public class XXX
{
private String XX ="";
@Override
public void toString(){
}
}
awk /public void toString/{print nitin}
像这样输出
public class XXX{
private String XX ="";
@Override
nitin
public void toString(){
}
}
但我想要
public class XXX{
private String XX ="";
nitin
@Override
public void toString(){
}
}
在模式匹配中,如果我使用@override,那么它将编辑@override 的其他方法。
请建议我如何实现这一点。
解决方案
考虑到您的输入文件和所需的输出,这对我有用:
/@Override/ {
override = 1;
override_string = $0; # @Override might be indented at various levels
next;
}
override && ! /public void toString/ {
print override_string;
print $0;
override = 0;
next;
}
override && /public void toString/ {
# Get indent
match($0, /^\s*/, matches);
indent = matches[0];
printf("%s%s\n", indent, "nitin");
print override_string;
print $0;
override = 0;
next;
}
{
print;
}
这是使用getline的替代解决方案:
/@Override/ {
getline nextline;
if(nextline ~ /public void toString[(]/) {
match($0, /^\s*/, matches); # get indent
indent = matches[0];
printf("%s%s\n", indent, "nitin");
print $0;
print nextline;
next;
} else {
print $0;
print nextline;
next;
}
}
{
print;
}
推荐阅读
- python - 在python中增加最大键大小LMDB键值数据库?
- java - 如何将平方根函数合并到我正在尝试制作的这个计算器中?
- c# - 如何使用 C#、LINQ 在 mongodb 中获取每个组的 n 条记录?
- c# - 检查类型 X 的对象是否在列表中并更新相应字段失败,原因我不明白
- c - 错误:尽管使用箭头运算符,但请求成员数据不是结构或联合
- python - 是否可以忽略 NA 但不能将其放入数据框中?
- uwp - 无法在 UWP 中创建 CompositionTarget
- arrays - 如何从 2 数组中获取值并将其转换为新数组中的 1 值?
- mysql - Docker swarm 将节点可用性限制为仅在大型堆栈中的一项服务
- css - CSS 伪元素 - 仅针对当前元素,而不是后代