因此,我尝试将一种格式的 mac 地址转换为另一种格式,即从XXXX:XXXX:XXXX
到XX:XX:XX:XX:XX:XX
。
我能够使用模式创建 sed 字符串,但只能针对每个 mac 地址运行它。关于如何自动执行脚本以针对连续的 mac 地址运行它,有什么建议吗?
以下是一个例子:
$ echo 5254.0040.8beb | sed 's/\.//g' | sed -e 's/\([0-9A-Fa-f]\{2\}\)/\1:/g' -e 's/\(.*\):$/\1/'
52:54:00:40:8b:eb
我不想运行它 100 次:/
答案1
执行此操作的方法是将所有 MAC 地址保存在一个文件中,然后sed
对该文件运行命令。不过,您的方法太复杂了,请尝试以下方法:
$ echo 5254.0040.8beb | sed 's/\.//g; s/../&:/g; s/:$//'
52:54:00:40:8b:eb
第一个s///
命令删除.
,第二个命令将每组 2 个字符 ( ..
) 替换为它们自己 ( &
) 和:
,第三个命令删除:
前一个替换命令添加到行尾的 。
要对 MAC 地址文件 (每行一个地址) 运行此操作,请执行以下操作:
sed 's/\.//g; s/../&:/g; s/:$//' file
答案2
$ echo 5254.0040.8beb | sed -r 's/\./:/g; s/([[:xdigit:]]{2})([[:xdigit:]]{2})/\1:\2/g'
52:54:00:40:8b:eb
答案3
使用 awk 的方法:为了处理单个字符,将字段分隔符定义为空白,删除原始 MAC 地址中的点,并在每隔一个字符后打印一个点。对于单个 MAC 地址,代码将如下所示:
echo 5254.0040.8beb | awk -F '' '{gsub(/\./,"");for(i=1;i<=NF;i++){printf $i;if(i%2 == 0 && i!=NF) printf ":" }}'
我们可以将代码转换成可执行脚本,如下所示:
- 创建一个名为的文件
mac-editor.awk
。其内容位于以下文件中 - 使用以下方式使脚本可执行
chmod 755 mac-editor.awk
; 使用输入文件作为参数运行代码,如下所示
./mac-editor.awk 输入文件.txt
AWK 脚本内容
#!/usr/bin/awk -f
BEGIN {
FS="";
}
{
gsub(/\./,"");
for(i=1;i<=NF;i++){
printf $i;
if(i%2 == 0 && i!=NF)
printf ":"
};
printf "\n";
}
演示:
下面的演示显示了脚本如何处理输入文件,其中有 MAC 地址列表,每行一个。
$ cat mac-addresses.txt
7ab1.34b9.2eb0
2689.373c.d131
d271.a9a2.14c4
$ mac-editor.awk mac-addresses.txt
7a:b1:34:b9:2e:b0
26:89:37:3c:d1:31
d2:71:a9:a2:14:c4