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