Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux中使用awk仅打印第二列中mac地址的最后4位数字_Linux_Bash_Shell_Awk - Fatal编程技术网

在linux中使用awk仅打印第二列中mac地址的最后4位数字

在linux中使用awk仅打印第二列中mac地址的最后4位数字,linux,bash,shell,awk,Linux,Bash,Shell,Awk,我用awk和arp-scan命令制作了一个shell脚本来获取mac地址列表。我只想将mac地址剥离到最后4位,即(我只想打印字母yy) 尝试cut-d:-f5- (选项含义:分隔符:和字段5及以上。) 编辑:或按要求在awk中编辑: awk-F:'{print$5:“$6}”试试cut-d:-f5- (选项含义:分隔符:和字段5及以上。) 编辑:或按要求在awk中编辑: awk-F:'{print$5:“$6}”以下是一些 line=cx:bf:9c:a4:yy:yy echo ${line:

我用
awk
arp-scan
命令制作了一个shell脚本来获取mac地址列表。我只想将mac地址剥离到最后4位,即(我只想打印字母
yy


尝试
cut-d:-f5-

(选项含义:分隔符:和字段5及以上。)

编辑:或按要求在awk中编辑:
awk-F:'{print$5:“$6}”
试试
cut-d:-f5-

(选项含义:分隔符:和字段5及以上。)

编辑:或按要求在awk中编辑:
awk-F:'{print$5:“$6}”

以下是一些

line=cx:bf:9c:a4:yy:yy
echo ${line:(-5)}

line=cx:bf:9c:a4:yy:yy
echo $line | cut -d":" -f5-
这里有一些

line=cx:bf:9c:a4:yy:yy
echo ${line:(-5)}

line=cx:bf:9c:a4:yy:yy
echo $line | cut -d":" -f5-

我想您想去掉尾随空格,但不清楚您是想要
yy:yy
还是
yyy

无论如何,有多种方法可以实现,但您已经在运行
AWK
,并将MAC设置为
$2

第一种情况是:

awk '{match($2,/([^:]{2}:[^:]{2}) *$/,m); print m[0]}'
yy:yy
在第二个(没有冒号:):


如果您的
AWK
中没有可用的
match
,您需要求助于
gensub

awk '{print gensub(/.*([^:]{2}:[^:]{2}) *$/,"\\1","g",$2)}'
yy:yy
或:


编辑:

我现在意识到尾随空格是anubhava在他的编辑中添加的;他们没有出现在原始问题中!然后,只需保留最后n个字符:

awk '{print substr($2,13,5)}'
yy:yy
或:


我想您想去掉尾随空格,但不清楚您是想要
yy:yy
还是
yyy

无论如何,有多种方法可以实现,但您已经在运行
AWK
,并将MAC设置为
$2

第一种情况是:

awk '{match($2,/([^:]{2}:[^:]{2}) *$/,m); print m[0]}'
yy:yy
在第二个(没有冒号:):


如果您的
AWK
中没有可用的
match
,您需要求助于
gensub

awk '{print gensub(/.*([^:]{2}:[^:]{2}) *$/,"\\1","g",$2)}'
yy:yy
或:


编辑:

我现在意识到尾随空格是anubhava在他的编辑中添加的;他们没有出现在原始问题中!然后,只需保留最后n个字符:

awk '{print substr($2,13,5)}'
yy:yy
或:


考虑到“始终”是6个八位字节,您可能只需执行以下操作即可获得最后2个八位字节:

awk '{print substr($0,13)}' input.txt
在使用
arp-an
进行动态测试时,我注意到输出并不总是打印mac地址,在某些情况下,它会返回如下内容:

(169.254.113.54) at (incomplete) on en4 [ethernet]
因此,最好过滤输入以保证mac地址,这可以通过应用以下方法实现:

在awk中应用正则表达式并仅打印最后两个八进制数:

arp -an | awk '{if ($4 ~ /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/) print substr($4,13)}'
这将过滤列
$4
并验证是否为有效的MAC地址,然后使用
substr
仅返回最后的“字母”

您还可以按
进行拆分,并以多种方式打印输出,例如:

awk '{if ($4 ~ /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/) split($4,a,":");  print a[5] ":" a[6]}
注意


考虑到“始终”是6个八位字节,您可能只需执行以下操作即可获得最后2个八位字节:

awk '{print substr($0,13)}' input.txt
在使用
arp-an
进行动态测试时,我注意到输出并不总是打印mac地址,在某些情况下,它会返回如下内容:

(169.254.113.54) at (incomplete) on en4 [ethernet]
因此,最好过滤输入以保证mac地址,这可以通过应用以下方法实现:

在awk中应用正则表达式并仅打印最后两个八进制数:

arp -an | awk '{if ($4 ~ /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/) print substr($4,13)}'
这将过滤列
$4
并验证是否为有效的MAC地址,然后使用
substr
仅返回最后的“字母”

您还可以按
进行拆分,并以多种方式打印输出,例如:

awk '{if ($4 ~ /^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/) split($4,a,":");  print a[5] ":" a[6]}
注意


可以通过多种方式完成。你试过什么吗?我试过很多东西。删除所有不必要的行和行。但我无法缩短mac地址。我已将其存储在$2Try中,此方法也
awk-F:“{print$NF:“$(NF-1)}”文件名
请用您迄今为止的尝试更新您的问题。@YashBhagwatkar,在代码标记中显示您的预期输出,以便我们可以尝试帮助您(虽然我提供了解决方案,但由于没有给出预期的输出,所以这只是基于一些假设)。可以通过多种方式完成。您尝试过什么吗?我尝试过很多方法。删除了所有不必要的行和行。但我无法缩短mac地址。我将其存储在$2Try中此方法也
awk-F:“{print$NF”:$(NF-1)}“文件名
请用您迄今为止的尝试更新您的问题。@YashBhagwatkar,在代码标签中显示您的预期输出,以便我们可以尝试帮助您(虽然我提供了解决方案,但由于未给出预期输出,因此仅基于一些假设)。