Shell编程--正则表达式(基本/拓展元字符、正则判断)

1.基本元字符

字符功能示例
^行首定位符^love
$行尾定位符love$
.匹配单个字符l…e
*匹配前导符0到多次ab*love
.*匹配任意多个字符(贪婪匹配)ab.*love
[]匹配方括号中任意一个字符[lL]ove
[-]匹配指定范围内的一个字符[a-zA-Z0-9]ove
[^]匹配不在指定组里的字符[^a-z0-9]ove
\用来转义元字符love\.
\<词首定位符\<love
\>词尾定位符love>\

练习:

[root@localhost ~]# cat test.txt
Love
love
loveyou
aaabbblove
a123love
www.love.com
i love you
do you love me

//以lo开头
[root@localhost ~]# grep  ^lo test.txt 
love
loveyou
[root@localhost ~]# grep -i ^lo test.txt    //-i不区分大小写
Love
love
loveyou

//以me结尾
[root@localhost ~]# grep  me$ test.txt
do you love me

//匹配单个字符,一个.代表一个字符
[root@localhost ~]# grep  y.u test.txt
loveyou
i love you
do you love me
[root@localhost ~]# grep  l.e test.txt
[root@localhost ~]# grep  l..e test.txt
love
loveyou
aaabbblove
a123love
www.love.com
i love you
do you love me

//匹配前导符0到多次;前导符是"a" 即*前面a有0次到多次
[root@localhost ~]# grep a*l test.txt
love
loveyou
aaabbblove
a123love
www.love.com
i love you
do you love me

//贪婪匹配;匹配任意多个字符;即*的前导符是"a." 但是"."可以匹配任意单个字符
[root@localhost ~]# grep a.*l test.txt
aaabbblove
a123love

//匹配中括号中任意一个字符
[root@localhost ~]# grep a[0-9]l*  test.txt
a123love

//匹配指定范围内的一个字符
[root@localhost ~]# grep a[0-9a-z]l*  test.txt
aaabbblove
a123love

//匹配不在指定组里的字符
[root@localhost ~]# grep a[^0-9]  test.txt
aaabbblove

//转义匹配
[root@localhost ~]# grep www\.  test.txt
www.love.com
[root@localhost ~]# cat >>./test.txt<<eof
l*o*v*e
eof
[root@localhost ~]# grep * test.txt
[root@localhost ~]# grep \* test.txt
[root@localhost ~]# l*o*v*e
//单引号和双引号这里作用相同
[root@localhost ~]# grep "*" test.txt
[root@localhost ~]# l*o*v*e
[root@localhost ~]# grep '*' test.txt
[root@localhost ~]# l*o*v*e

2.拓展元字符

(示例在grep正则过滤)

字符功能示例
+匹配一次或多次前导字符[a-z]+ove
?匹配零次或一次前导字符lo?ve
a|b匹配a或blove|hate
x{m}字符x重复m次o{5}
x{m,}字符x重复至少m次o{5,}
x{m,n}字符x重复m到n次o{5,10}
()字符组

3.正则判断=~

[root@localhost ~]# num1=1 
//运用正则,判断需要[[ ]]
//注意:^在[]内表示取反,^在[]外表示以什么开头
//=~ 用于正则表达式匹配
[root@localhost ~]# [[ $num1 =~ ^[0-9] ]] && echo "yes" || echo "no"
yes
[root@localhost ~]# [[ $num1 =~ [^0-9] ]] && echo "yes" || echo "no"
no


[root@localhost ~]# num3=1b1 
[root@localhost ~]# [[ $num3 =~ ^[0-9] ]] && echo "yes" || echo "no"
yes
[root@localhost ~]# [[ $num3 =~ ^[0-9]+$ ]] && echo "yes" || echo "no"
no    //num3是纯数字,这里才会是yes
[root@localhost ~]# [[ $num3 =~ [^0-9] ]] && echo "yes" || echo "no"
yes
[root@localhost ~]# [[ $num3 =~ ^[^0-9] ]] && echo "yes" || echo "no"
no
[root@localhost ~]# [[ $num3 =~ ^[0-9][a-z][0-9]+$ ]] && echo "yes" || echo "no"
yes

//或:
if [[ $num3 =~ ^[0-9]+$ ]];then  echo "yes" ;else echo 'no'; fi

[root@localhost ~]# num=1.6
[root@localhost ~]# [[ $num =~ ^[0-9]\.[0-9]+$ || $num =~ ^[0-9]+$ ]] && echo "yes" || echo "no"       //输入的只能是数字(包括小数)
yes
[root@localhost ~]# [[ $num =~ . && echo "yes" || echo "no"
yes    //1.6作为字符串被匹配
  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Shell编程中的正则表达式是一种用于匹配和操作字符串的强大工具。它使用特定的语法规则来描述和匹配符合某个模式的字符串。在Shell编程中,常用的工具如grep、sed和awk都支持使用正则表达式进行模式匹配和文本处理。正则表达式由普通字符和特殊字符(元字符)组成。普通字符指的是任意字母、数字或其他字符,而元字符具有特殊的意义和功能,用于表示模式中的特定字符或符号。通过使用正则表达式,可以实现字符串的匹配、替换、提取等操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Shell编程正则表达式](https://blog.csdn.net/weixin_51099370/article/details/124568808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Linux操作系统——Shell编程 正则表达式](https://blog.csdn.net/weixin_46411355/article/details/125628828)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TA548464

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值