我有一个从网站复制并粘贴的文本文件 不幸的是,该格式有点乱码,因为它会将单词放置在错误的地方,我无法将其剪切并简单地粘贴到所需的格式中。我有大约500行这样的代码!每行要花大约1分钟-2分钟才能剪切并粘贴正确的格式。所以我要完成的工作就是削减这样的IP地址和子网掩码格式
192.168.12.0/255.255.255.0
并将其翻译为此
192.168.12.0 /24 # <---notice with space there..
例如,这是代码行:
address-object ipv4 192.168.12.0 192.168.12.0/255.255.255.0 Network IPv4
它应该像这样:
address-object ipv4 192.168.12.0 Network 192.168.12.0 /24 zone LAN
因此,所做的更改是我必须将“网络”一词剪切并粘贴到代码中的第4个字符串上,并将子网掩码更改为斜杠前缀,然后将字符串区域LAN添加到末尾 任何好的建议,我如何可以完成这样的任务? 我以为sed可以工作,但不知道
的语法我已经使用sed修改了一些代码,但其余部分却卡住了
sed -i -e 's/^.............../ipv4/' config1.txt
答案 0 :(得分:1)
一种方法:
$ cat file
address-object ipv4 192.168.12.0 192.168.12.0/255.255.255.0 Network IPv4
$
$ awk '{$4= $(NF-1) FS $4; $(NF-1)="zone"; $NF="LAN"}1' file | sed -r 's^([0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})/[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}^\1 /24^'
address-object ipv4 192.168.12.0 Network 192.168.12.0 /24 zone LAN
使用awk,将“网络”移到第4列之前,并用“区域”和“ LAN”替换最后两列。使用sed,将ip addr / subnet替换为24。
答案 1 :(得分:0)
您可以单独使用awk
并使用'/'
的字段分隔符,然后将所得的$1
和$2
分成数组以将输出放在一起,例如
awk -F'/' '{
split ($1, a, " ")
split ($2, b, " ")
printf "%s %s %s %s %s %s\n", a[1], a[2], a[3], b[2], a[4], "/24 zone LAN"
}' file
使用/输出示例
将数据保存在file
中,只需在终端中复制/粘贴以上内容即可:
$ awk -F'/' '{
> split ($1, a, " ")
> split ($2, b, " ")
> printf "%s %s %s %s %s %s\n", a[1], a[2], a[3], b[2], a[4], "/24 zone LAN"
> }' file
address-object ipv4 192.168.12.0 Network 192.168.12.0 /24 zone LAN
答案 2 :(得分:0)
sed
仅解决方案
sed -E 's@(\S+ \S+ \S+) (\S+)/(\S+) (\S+) .*@\1 \4 \2 /24 zone LAN@' config1.txt
例如:
Input : address-object ipv4 192.168.12.0 192.168.12.0/255.255.255.0 Network IPv4
Match : (\S+ \S+ \S+ ) (\S+) /(\S+) (\S+) .*
Output: address-object ipv4 192.168.12.0 Network 192.168.12.0 /24 zone LAN
这假设每一行的格式都完全相同(字数相同)。因此,完整的单词由\S+
捕获。如果没有,则应根据需要对模式进行进一步的专门化。
-E
不是POSIX
标准,即在某些平台上可能无法使用。