繁体   English   中英

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

[英]sed remove first two octets from ip

我有一个包含一堆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这样做,所以我会感激任何帮助。

看来你可能会用

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组)一至三位数,a . 再次1到3位数
  • \\b - 单词边界

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

请参阅在线演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM