笔记之路,shell 从入门到入土(八)函数 & 正则

一、函数

1. 函数定义

1.1 方法(1)

funcName()
{
    funcBody (commands)
}

1.2 方法(2)

function funcName()
{
    funcBody (commands)
}

2. 函数的使用

2.1 命令行使用

  • 使用 source test.sh 来声明这些函数,就可以在命令行使用。并且 source 后函数还可以使用 tab 进行补全。

  • 若要全局使用函数,将函数写到 /etc/bashrc 文件中。

2.2 脚本中调用

xhr@ubuntu:~$ cat variable.sh 
#!/bin/bash
function functest() {
	echo $1 $2
}
functest $2 $1
xhr@ubuntu:~$ ./variable.sh xhr ly
ly xhr

二、正则表达式

   正则表达式(Regular Expression、regex 或 regexp,缩写为 RE),也译为正规表示法、常规表示法,是一种字符模式,用于在查找过程中匹配指定的字符。

   许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在 Perl 中就内建了一个功能强大的正则表达式引擎。

   正则表达式这个概念最初是由 Unix 中的工具软件(例如 sed 和 grep)普及开的。

   支持正则表达式的程序如:locate | find | vim | grep | sed | awk

作用:

  1. 匹配邮箱、匹配身份证号码、手机号、银行卡号等
  2. 匹配某些特定字符串,做特定处理等等

名词解释:

  • 元字符
    指那些在正则表达式中举有特殊意义的专用字符,如:点(.) 星(*) 问好(?) 等
  • 前导字符
    位于元字符前面的字符。 abc* aooo.

1. 第一类正则表达式

1.1 正则中普通常用的元字符

元字符功能备注
.匹配除了换行符以外的任意单个字符
*前导字符出现0次或连续多次
.*任意长度字符ab.*
^行首(以…开头)^root
$行尾(以…结尾)bash$
^$空行
[]匹配括号里任意单个字符或一组单个字符[abc]
[^]匹配不包含括号里的任一单个字符或一组单个字符[^abc]
^[]匹配以括号里任意单个字符串一组单个字符开头^[abc]
^[^]匹配以括号里任意单个字符串一组单个字符开头

1.2 其他常用元字符

元字符功能备注
\<匹配单词的头grep ‘\<hel’ hello.txt
\>匹配单词的尾grep ‘rld’ world.txt
\< \>全字匹配类似于 grep -w
\{n\}匹配前导字符连续出现n次
\{n,\}匹配前导字符至少出现n次
\{n,m\}匹配前导字符出现n到m次之间
\( \)保存被匹配的字符[note]
\d匹配数字 (grep -P) 加 -P 选项[0-9]
\w匹配字母数字下划线 (grep -P)[a-zA-Z0-9]
\s匹配空格、制表符、换页符 (grep -P)[\t\r\n]

[note] \( \) 的使用:

vim 一个文件,“ \1 ” 代表了被保存的第几个字符串,回车后就可以保持前部分字符串,home 变为 web。
搜索替换
替换后

1.3 扩展类正则常用元字符

  • grep 命令使用这类正则,需要添加 -E 选项
  • 或者使用 egrep 命令
  • sed 需要添加 -r 选项
扩展元字符功能备注
+匹配一个或多个前导字符bo+ 匹配 boo、bo
?匹配零个或一个前导字符bo? 匹配 b、bo
|a|b 匹配 a或b
()组字符(字符串)(my|your)self 匹配 myself 或 yourself
{n}前导字符重复 n 次
{n,}前导字符至少重复 n 次
{n,m}前导字符重复 n 到 m 次

2. 第二类正则表达式

以下示例都为扩展正则

表达式功能示例
[:alnum:]字母与数字字符[[:alnum:]]+
[:alpha:]字母字符(包括大小写字母)[[:alpha:]]{4}
[:blank:]空格与制表符[[:blank:]]*
[:digit:]数字[[:digit:]]?
[:lower:]小写字母[[:lower:]]{4,}
[:upper:]大写字母[[:upper:]]+
[:punct:]标点符号[[:punct:]]
[:space:]包括换行符、回车等在内的所有空白[[:space:]]+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值