我的输入文件数据
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。
请提出如何实现此目标。
答案 0 :(得分:0)
鉴于您的输入文件和所需的输出,这对我有用:
/@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;
}