sed从ip删除前两个八位字节

时间:2017-08-28 09:15:37

标签: regex bash networking sed

我有一个包含大量ip地址的文件。我想我的sed命令删除这些的前两个八位字节。 恩。 172.0.0.1应更改为XXX.ZZZ.0.1

我现在删除了持续的八位字节并用x替换它!

sed -i 's/\(\([0-9]\{1,3\}\.\)\{3\}\)[0-9]\{1,3\}/\1XXX/g' "${file}"

这是在bash脚本中运行的,该脚本将包含ip地址的文件作为输入参数。

我还没有弄清楚如何用sed这样做,所以我会感激任何帮助。

1 个答案:

答案 0 :(得分:2)

好像你可以使用

sed -i.bak -E 's/\b([0-9]{1,3}\.){2}([0-9]{1,3}\.[0-9]{1,3})\b/XXX.ZZZ.\2/g' "${file}"

-E(或其他操作系统上的-r)启用POSIX ERE语法,允许在模式中使用更少的转义(无需转义分组()符号和限制/范围量词{n,m})。

<强>详情

  • \b - 字边界
  • ([0-9]{1,3}\.){2} - 两次出现(第1组)一至三位数字和一个点
  • ([0-9]{1,3}\.[0-9]{1,3}) - (第2组)一到三位数,一个.和另外一到三位
  • \b - 字边界

整个匹配将替换为第2组值(\2)。 -i.bak将在文件中进行替换,并生成扩展名为.bak的原始副本。

请参阅online demo