首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何检查输入字符串是否与特定格式匹配?

如何检查输入字符串是否与特定格式匹配?
EN

Unix & Linux用户
提问于 2018-01-08 18:43:18
回答 4查看 18.1K关注 0票数 7

用户可以用以下方式在我的Bash脚本中编写一个mac地址:

代码语言:javascript
运行
复制
read -p "enter mac-address " mac-address

现在我想签入一个if -语句,如果这个mac地址与“特定”格式匹配的话。也就是说,它应该是FF:FF:FF:FF:FF:FF而不是FFFFFFFFFFFF。此外,长度应该是正确的: 6x2。

EN

回答 4

Unix & Linux用户

回答已采纳

发布于 2018-01-08 18:58:09

懒惰的方式就是跑。

代码语言:javascript
运行
复制
if [[ $mac_address == ??:??:??:??:??:?? ]]; then echo Heureka; fi

但这并不能检查它是否是一根六角线。所以如果这很重要

代码语言:javascript
运行
复制
if [[ $mac_address =~ ^[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]$ ]]; then echo Heureka; fi

也许会更好。后者可以缩短为

代码语言:javascript
运行
复制
if [[ $mac_address =~ ^([[:xdigit:]]{2}:){5}[[:xdigit:]]{2}$ ]]; then
    echo Heureka; 
fi

如果模式匹配,我也不认为需要检查正确的长度。

票数 13
EN

Unix & Linux用户

发布于 2018-01-08 20:21:48

代码语言:javascript
运行
复制
[[ $mac_address: =~ ^([[:xdigit:]]{2}:){6}$ ]]
票数 6
EN

Unix & Linux用户

发布于 2018-01-08 19:15:44

我更改了变量的名称,使其由合法字符组成,然后使用=~测试操作符将值与扩展的正则表达式匹配进行比较:在字符串^的开头,"2十六进制数字和冒号“5次,后面是2十六进制数字,结束字符串$

代码语言:javascript
运行
复制
#!/bin/bash

read -p "enter mac-address " mac_address

if [[ $mac_address =~ ^([[:xdigit:]][[:xdigit:]]:){5}[[:xdigit:]][[:xdigit:]]$ ]]
then
  echo good
else
  echo bad
fi
票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/415645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档