免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6156 | 回复: 23
打印 上一主题 下一主题

[文本处理] UUID文本处理求助 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-20 19:39 |只看该作者 |倒序浏览
30可用积分
大家好!
我有一个问题向大家请教。
这个问题其实由三个小问题组成。

第一步:取得第一个UUID的最后6个字节:
[root@hp8 ~]# ls -l /dev/disk/by-uuid
total 0
lrwxrwxrwx 1 root root 10 Oct 30 18:18 2a0264c2-bdf6-46c2-bdbb-148c56610f08 -> ../../sda2
lrwxrwxrwx 1 root root 10 Oct 30 18:18 746b4ed3-26d7-45fd-8c8d-50f6208decc6 -> ../../sda3
lrwxrwxrwx 1 root root 10 Oct 30 18:18 ae0cc389-6544-48e0-bdfa-8da4a70abd1d -> ../../sdb1
lrwxrwxrwx 1 root root 10 Oct 30 18:18 eb0fdc1c-9fa7-4e29-9dda-f6cedcc2c695 -> ../../sda1
[root@hp8 ~]#

root@kbox:~# ls -l /dev/disk/by-uuid
root@kbox:~#

把ls -l /dev/disk/by-uuid这条命令的输出中第一个UUID的最后一段6个字节以冒号为分隔符显示出来。
即得到结果:14:8c:56:61:0f:08。
如果ls -l /dev/disk/by-uuid这条命令的输出中没有任何UUID,则输出00:00:00:00:00:00。

第二步:取得第一个MAC地址的6个字节:
[root@hp8 ~]# ifconfig -a|grep HWaddr
eth0      Link encap:Ethernet  HWaddr 00:10:18:B1:FA:EF
eth1      Link encap:Ethernet  HWaddr 24:BE:05:03:EC:95
macvtap0  Link encap:Ethernet  HWaddr 52:54:00:47:E1:85
macvtap1  Link encap:Ethernet  HWaddr 52:54:00:7C:32:E8
macvtap2  Link encap:Ethernet  HWaddr 52:54:00:15:3D:A1
virbr0    Link encap:Ethernet  HWaddr 52:54:00:CB:38:4C
vnet0     Link encap:Ethernet  HWaddr FE:54:00:90:B2:1B
vnet1     Link encap:Ethernet  HWaddr FE:54:00:64:8F:F7
[root@hp8 ~]#

[root@cat1:/]#ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
igb0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 135.240.146.11 netmask ffffff00 broadcast 135.240.146.255
        ether 0:21:28:a3:6:38
[root@cat1:/]#

把ifconfig -a中第一个显示的MAC地址显示出来(字母统一以小写显示):
即得到结果:00:10:18:b1:ba:ef。
如果输出中的结果为0:21:28:a3:6:38,则显示为:00:21:28:a3:06:38。
如果ifconfig命令的输出中没有找到MAC地址,则输出00:00:00:00:00:00。

第三步:取第一步和第二步中得到的两组6个字节中按反序较大的一组,并显示结果。
例如第一步得到:14:8c:56:61:0f:08,第二步得到:00:10:18:b1:ba:ef。
则先比较第六个字节:08 < ef,所以选择00:10:18:b1:ba:ef。
(如果第六个字节相同,则比较第五个字节,。。。,依此类推。)


谢谢!

最佳答案

查看完整内容

回复 13# bikkuri yes, using the same way ...可以,照猫画虎...shell 十三問?http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=218853&fromuid=24785593Part-II(Regular Expression): (2008-10-30 02:26 最後更新)http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=218853&page=16#pid2934852

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2014-12-20 19:39 |只看该作者
本帖最后由 jason680 于 2014-12-21 15:52 编辑

回复 13# bikkuri

yes, using the same way ...
可以,照猫画虎...


shell 十三問?
http://bbs.chinaunix.net/forum.p ... mp;fromuid=24785593
Part-II(Regular Expression): (2008-10-30 02:26 最後更新)
http://bbs.chinaunix.net/forum.p ... ;page=16#pid2934852

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [报告]
发表于 2014-12-20 20:18 |只看该作者
没环境,30分拿不了,等大神来吧。

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
4 [报告]
发表于 2014-12-21 09:19 |只看该作者
参考一下吧,没测试对不对
  1. #/bin/bash

  2. #创建临时文件
  3. tmp_file=/tmp/tmpfile.$

  4. #获取uuid
  5. ls -l /dev/disk/by-uuid | awk '{print $9}'| awk 'BEGIN{FS="-"};(NF==5&&!a++){print $5}'  > $tmp_file
  6. sed -rin '/^$/! s/(..)(..)(..)(..)(..)(..)/\1:\2:\3:\4:\5:\6/' $tmp_file
  7. uuid=$(sed -n '1{/^$/{s/.*/00:00:00:00:00:00/g}}
  8. p' $tmp_file)
  9. echo -e "UID: "$uuid

  10. #获取MAC 中文系统:硬件地址
  11. ifconfig -a | awk '(/硬件地址/&& !a++){print $NF}' > $tmp_file
  12. mac=$(sed -n '1{/^$/{s/.*/00:00:00:00:00:00/g}}
  13. p' $tmp_file)
  14. echo -e "MAC: "$mac

  15. #比较
  16. echo -e "${uuid}\n${mac}" | awk 'BEGIN{FS=":"}{print $6":"$5":"$4":"$3":"$2":"$1}' | sort |awk 'BEGIN{FS=":"}{print $6":"$5":"$4":"$3":"$2":"$1}' > $tmp_file

  17. echo "---------------------"
  18. sed -n '$p' $tmp_file
  19. echo $tmp_file
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
5 [报告]
发表于 2014-12-21 10:33 |只看该作者
本帖最后由 bikkuri 于 2014-12-21 10:37 编辑

谢谢您的回复。
我试了一下,发现可以得到UUID,但是MAC得不到。

另外能不能不用查找关键字或者指定位置的方式来匹配UUID和MAC,比如:awk '{print $9}'以及awk '(/硬件地址/&& !a++){print $NF}'
因为目标文本所在的位置以及对应的关键字可能在不同的系统上都是不一样的。

能不能仅仅根据UUID和MAC的正则表达式来匹配,比如:
  1. UUID是:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)
  2. MAC是:xx:xx:xx:xx:xx:xx (1或2:1或2:1或2:1或2:1或2:1或2)
复制代码
x表示16进制数字,UUID由前8左4中4右4后12位16进制数字构成;MAC由6个1或2位16进制数字构成。

谢谢。

goofool 发表于 2014-12-21 09:19
参考一下吧,没测试对不对

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
6 [报告]
发表于 2014-12-21 10:45 |只看该作者
本帖最后由 bikong0411 于 2014-12-21 10:45 编辑
  1. #!/bin/sh
  2. addr=$(ls -l /dev/disk/by-uuid 2>/dev/null|awk -F' |-' '/-/{print $(NF-3);exit;}' | sed 's/../&:/g' | sed 's/:$//')
  3. addr=${addr:-00:00:00:00:00:00}
  4. w=($(ifconfig -a | awk '/HWaddr/{print $NF;exit;}'|awk -F: '{for(i=1;i<=NF;++i){printf("%02s ",$i);}}' | sed 's/ /:/g'|sed 's/:$//'))
  5. w=${w:-00:00:00:00:00:00}
  6. tmp_addr=$(awk -F: '{for(i=NF;i-->1;)printf $i;}' <<<$addr)
  7. tmp_w=$(awk -F: '{for(i=NF;i-->1;)printf $i;}' <<<$w)
  8. if [[ $tmp_addr > $tmp_w ]]; then
  9.     echo $addr
  10. else
  11.     echo $w
  12. fi
  13. exit $?
复制代码

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
7 [报告]
发表于 2014-12-21 10:56 |只看该作者
本帖最后由 goofool 于 2014-12-21 10:59 编辑

回复 4# bikkuri


    MAC地址把“硬件地址”换成相应的英文"HWaddr"就好了,因为我的系统是中文的

或者把“硬件地址”换成“Link”,只要匹配到那一行就行了,匹配到什么无所谓

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
8 [报告]
发表于 2014-12-21 10:58 |只看该作者
您好!
我在好几台机器上测试了一下您的程序,得到的结果都是00:00:00:00:00:00。
单独查找UUID和MAC的那两条命令得到的结果都是空。

回复 5# bikong0411


   

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
9 [报告]
发表于 2014-12-21 11:00 |只看该作者
能不能不用关键字呢?在solaris上既没有"HWaddr"也没有“硬件地址”。

goofool 发表于 2014-12-21 10:56
回复 4# bikkuri

论坛徽章:
7
申猴
日期:2014-12-21 13:57:24巳蛇
日期:2014-12-25 22:27:08申猴
日期:2015-01-19 08:07:36辰龙
日期:2015-02-04 11:40:06处女座
日期:2015-02-04 11:40:412015年亚洲杯之卡塔尔
日期:2015-03-06 12:01:322015年亚洲杯之乌兹别克斯坦
日期:2015-03-31 13:43:57
10 [报告]
发表于 2014-12-21 11:03 |只看该作者
回复 8# bikkuri


    你发一下MAC行的数据样式我看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP