2017-08-28 55 views
3

我有一个包含一堆ip地址的文件。我希望我的sed命令删除前两个八位字节。 ex。 172.0.0.1应改为XXX.ZZZ.0.1sed从ip中删除前两个八位组

我现在已经删除了最后一个八位组并将其替换为x!

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

这在需要含有的IP地址作为输入参数的文件一个bash脚本运行。

我一直没能弄清楚如何用sed来做这个,所以我会很感激任何帮助。

+0

Try ['sed -E's/\ b [0-9] {1,3} \。[0-9] {1,3} \。([0-9] {1,3} \ 。[0-9] {1,3})\ b/XXX.ZZZ。\ 1/g''](https://ideone.com/OAcWL0) –

+0

非常好,带有-i和带有ip的文件被替换为参数,这就像一个魅力! – brandborg

+0

s/remove/redact / –

回答

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} - 两个OCCURENCES(组1)一至三个数字和一个点
  • ([0-9]{1,3}\.[0-9]{1,3}) - (组2)一至三个数字,一个.和再一个1到3个数字
  • \b - 字边界

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

查看online demo