如何删除 awk 中的空格和换行符以插入字符串?

How to remove spaces and newline in awk for string insertion?

所以,我的 apache2 配置文件是这样的:

<Proxy balancer://mycluster>
             BalancerMember "ajp://10.x.x.xxx:8009" route=node1 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60
             BalancerMember "ajp://10.x.x.xx:8009" route=node2 loadfactor=1 keepalive=on  ttl=300 max=400 timeout=300 retry=60
             BalancerMember "ajp://10.x.x.xxx:8009" route=node3 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60
             BalancerMember "ajp://10.x.x.xx:8009" route=node4 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60
             BalancerMember "ajp://10.x.x.xx:8009" route=node5 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60
             BalancerMember "ajp://10.x.x.xx:8009" route=node6 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60
             BalancerMember "ajp://10.x.x.xxx:8009" route=node7 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60
            ProxySet lbmethod=byrequests
    </Proxy>

我想要做的是在 ProxySet lbmethod=byrequests 行前插入一个带有 # 的新 BalancerMember。我将使用 shell 脚本来执行此操作。

所以它应该看起来像:#BalancerMember "ajp://10.x.x.xxx:8009" route=node8 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60

我试过的是:

awk -v s1='"' -v ip="10.0.7.1" -v no="8" '
/ProxySet lbmethod=byrequests/{
print "\n\t\t#BalancerMember " s1 "ajp://" ip ":8009" s1 " route=node" no " loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60"
next
}
1' /tmp/000-site.conf > /tmp/000-site.conf.tmp && mv /tmp/000-site.conf.tmp /tmp/000-site.conf
}

所以,上述解决方案工作正常,但留下了我不想要的换行符。我试过去除 ORS。

能否请您尝试以下操作。(创建 awk 的变量 line,其中将包含新行的值)

awk -v line='#BalancerMember "ajp://10.x.x.xxx:8009" route=node8 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60' '
/ProxySet lbmethod=byrequests/{
  print "             " line ORS [=10=]
  next
}
1'  Input_file

说明: 在此处添加对上述代码的说明。

awk -v line='#BalancerMember "ajp://10.x.x.xxx:8009" route=node8 loadfactor=1 keepalive=on ttl=300 max=400 timeout=300 retry=60' ' ##Creating variable line.
/ProxySet lbmethod=byrequests/{     ##Checking condition here if a line has string ProxySet lbmethod=byrequests then do following.
  print "             " line ORS [=11=] ##Printing space then variable line ORS and then print currrent line value then.
  next                              ##Mentioning next out of the box keyword to skip all further statements.
}
1                                   ##Mentioning 1 will print the lines here, awk works on condition then action, making condition true here, print action will happen.
'  Input_file                       ##Mentioning Input_file name here.