Regex 使用sed获取文件的IPv4地址并使用前缀导出

Regex 使用sed获取文件的IPv4地址并使用前缀导出,regex,bash,sed,Regex,Bash,Sed,我有一个文件iplist.txt,内容如下: 1.2.3.4 127.0.0.1 192.168.1.0/24 1111:2222:3333:4444:: 5.6.7.8 我正在试图找到一种方法,在不使用IPv6的情况下导出一个新文件,并且每行都带有前缀,类似于: exportediplist.txt /ip add address=1.2.3.4 /ip add address=127.0.0.1 /ip add address=192.168.1.0/24 /ip add address=

我有一个文件iplist.txt,内容如下:

1.2.3.4
127.0.0.1
192.168.1.0/24
1111:2222:3333:4444::
5.6.7.8
我正在试图找到一种方法,在不使用IPv6的情况下导出一个新文件,并且每行都带有前缀,类似于:

exportediplist.txt

/ip add address=1.2.3.4
/ip add address=127.0.0.1
/ip add address=192.168.1.0/24
/ip add address=5.6.7.8
我尝试做的第一件事是添加一个前缀:

originalfile=/somepath/iplist.txt
exportedfile=/somepath/exportediplist.txt
sed -e 's#^#/ip add address=#' $originalfile > $exportedfile

它工作正常,但我不知道如何从文件中删除IPv6。使用sed并不重要,只要是与debian一起工作的任何东西。

对于GNU
sed
,您可以使用

sed -En '/([0-9]+\.){3}[0-9]+/{s,,/ip add address=&,p}' $originalfile > $exportedfile
或者,使用更精确的表达式来匹配整个类似IPv4的线路:

sed -En '/^([0-9]+\.){3}[0-9]+(\/[0-9]+)?$/{s,,/ip add address=&,p}' $originalfile > $exportedfile
见和

详细信息

  • -En
    -
    E
    启用POSIX ERE语法,而
    n
    抑制默认行输出
  • /([0-9]+\){3}[0-9]+/
    -查找以点分隔的4个数字的所有行
  • /^([0-9]+\){3}[0-9]+(\/[0-9]+)?$/
    是相同的,但另外检查字符串的开头(
    ^
    )和结尾(
    $
    ),并且还将
    //code>之后的可选端口号与
    (\/[0-9]+)?
    匹配
  • s,,/ip add address=&,
    -在找到的行上,将匹配项替换为
    /ip add address=
    +匹配值
  • p
    -打印结果

A
grep/sed
组合:

$ egrep -v ':' iplist.txt | sed 's|^|/ip add address=|g'
/ip add address=1.2.3.4
/ip add address=127.0.0.1
/ip add address=192.168.1.0/24
/ip add address=5.6.7.8
使用sed的另一个想法是:

$ sed '/:/d;s|^|/ip add address=|g' iplist.txt
/ip add address=1.2.3.4
/ip add address=127.0.0.1
/ip add address=192.168.1.0/24
/ip add address=5.6.7.8
其中:

  • /:/d
    -跳过/删除包含冒号的任何行(
  • s| ^ | ip add address'| g
    -用所需字符串在其余行的前面加上前缀
一个
awk
idea:

$ awk '/:/ { next } { printf "/ip add address=%s\n", $0}' iplist.txt
/ip add address=1.2.3.4
/ip add address=127.0.0.1
/ip add address=192.168.1.0/24
/ip add address=5.6.7.8

一个非常简单的单行程序
awk

awk'!/:/{print”/ip add address=“$0}”infle>outfile
工作原理:

  • !/:/:如果不包含冒号字符,请选择要处理的行
  • {print”/ip add address=“$0}
    :通过添加新前缀填充来处理行