如何将file1-output字符串替换为特定行号中的file-2

时间:2012-12-23 11:55:14

标签: shell sed awk

我需要从/ etc / hosts文件中获取ip地址,并使用它来替换/etc/snmp/snmpd.conf文件的特定行号中的ip地址。

如何继续使用sed,awk或其他工具?

1 个答案:

答案 0 :(得分:0)

使用sed:

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}/
  }"