我需要从/ etc / hosts文件中获取ip地址,并使用它来替换/etc/snmp/snmpd.conf文件的特定行号中的ip地址。
如何继续使用sed,awk或其他工具?
答案 0 :(得分:0)
sed -e "${lineNumber}s/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/${newIp}/"
Nota :我认为这不是一个好习惯。
你可以更简单地点击一些 fieldname 不得不改变:
sed -e "/${fieldName}/s/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/${newIp}/"
如果您认为fieldName
可能位于文件的某个部分:
sed -e "${lineNumMin},${lineNumMax}{ /${fieldName}/s/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/${newIp}/ }"
写得更好:
sed -e "${lineNumMin},${lineNumMax}{
/${fieldName}/s/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/${newIp}/
}"
甚至更好:特定标记之前的特定字段名:
sed -e "1,/${endTag}/{
/${fieldName}/s/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/${newIp}/
}"
> 特定标签后或:
sed -e "/${startTag}/,${
/${fieldName}/s/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/${newIp}/
}"
两个细节标记之间的或甚至:
sed -e "/${startTag}/,/${endTag}/{
/${fieldName}/s/[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/${newIp}/
}"