海兰,BASH:斯普利特MAC地址 - > 000E0C7F6676为00:0E:0C:7F:66:76
有人可以帮助我以极快的MAC地址从一个日志文件? :-)
此:
000E0C7F6676
应该是:
00:0E:0C:7F:66:76
大气压我分裂这个与OpenOffice的,但有超过200 MAC地址,这是很无聊的,慢...
这将是很好,如果解决方案是bash。 :-)
在此先感谢。
海兰,BASH:斯普利特MAC地址 - > 000E0C7F6676为00:0E:0C:7F:66:76
有人可以帮助我以极快的MAC地址从一个日志文件? :-)
此:
000E0C7F6676
应该是:
00:0E:0C:7F:66:76
大气压我分裂这个与OpenOffice的,但有超过200 MAC地址,这是很无聊的,慢...
这将是很好,如果解决方案是bash。 :-)
在此先感谢。
一个简单的sed脚本应该这样做。
sed -e 's/[0-9A-F]\{2\}/&:/g' -e 's/:$//' myFile
这会带MAC地址列表中myFile
,每行一个,并插入一个“:”每两个十六进制数字后,最后删除最后一个。
$ mac=000E0C7F6676
$ s=${mac:0:2}
$ for((i=1;i<${#mac};i+=2)); do s=$s:${mac:$i:2}; done
$ echo $s
00:00:E0:C7:F6:67:6
你知道一种实现这种工作的方法: '$ {mac // ??/??:/}',也就是说,你知道如何得到替代部分中展开的任何东西吗? – falstro 2010-07-16 14:26:11
+1在$(cat file-with-macs.txt)的'for mac中包装这个;做{...}'这对OP来说是一个很好的纯粹的bash解决方案。 – 2010-07-16 17:02:25
@Dan:不,它应该是'while read -r line;做...;完成
Pure Bash。这个片断
mac='000E0C7F6676'
array=()
for ((CNTR=0; CNTR<${#mac}; CNTR+=2)); do
array+=(${mac:CNTR:2})
done
IFS=':'
string="${array[*]}"
echo -e "$string"
打印
00:0E:0C:7F:66:76
$ perl -lne 'print join ":", $1 =~ /(..)/g while /\b([\da-f]{12})\b/ig' file.log 00:0E:0C:7F:66:76
如果你喜欢它保存为一个程序,使用
#! /usr/bin/perl -ln
print join ":" => $1 =~ /(..)/g
while /\b([\da-f]{12})\b/ig;
采样运行:
$ ./macs file.log 00:0E:0C:7F:66:76
imo,正则表达式是固定宽度字符串的错误工具。
perl -alne 'print join(":",unpack("A2A2A2A2A2A2",$_))' filename
另外,
gawk -v FIELDWIDTHS='2 2 2 2 2 2' -v OFS=':' '{$1=$1;print }'
这与分配有点时髦的更改打印的行为。可能更清楚,只是打印$ 1,$ 2,$ 3,$ 4 $ 5,$ 6
打我吧...知道gawk必须有ananswer :-) – 2010-07-16 18:21:08
需要的Bash版本> = 3.2
#!/bin/bash
for i in {1..6}
do
pattern+='([[:xdigit:]]{2})'
done
saveIFS=$IFS
IFS=':'
while read -r line
do
[[ $line =~ $pattern ]]
mac="${BASH_REMATCH[*]:1}"
echo "$mac"
done <macfile.txt> newfile.txt
IFS=$saveIFS
如果你的文件中包含的其他信息除了MAC地址,你要保留,您需要修改正则表达式,并可能在循环内移动IFS
操作。
不幸的是,使用类似${mac//??/??:/}
的东西在Bash中没有相应的sed 's/../&:/'
。
谢谢,这太糟糕了(我的意思是'$ {mac/??/??:/}'部分)。 – falstro 2010-07-19 06:44:25
它只是一个mac地址列表,或者是否有其他文件? – falstro 2010-07-16 14:16:39
请参阅http://stackoverflow.com/questions/1187078/how-to-insert-a-new-line-character-after-a-fixed-number-of-characters-in-a-file – tanascius 2010-07-16 14:19:07
还有一些其他数据在文件中。它现在适用于一些“解决方法”和你的代码片段。谢谢你们。 :-) – fwaechter 2010-07-19 06:22:49