Linux——正则表达式

正则表达式(regular expression)定义:正则表达式是由字母、数字、特殊符号按照某种正确的规则组合而成的一个公式,用来表达某种含义。

表达式表达的意思,其他的程序根据这个意思去查找内容,然后进行增删改查的功能。 

perl语言最先推出正则表达式,python、go、Java、shell等编程语言都支持正则表达式。

可以把它理解为一种方法,很多命令都支持或者使用这种方法(vim grep sed awk nginx等)。

元字符:由特殊含义的字符,可以表示其他的含义。 

类型:

1.基本正则表达式    ^ $ . *

2.扩展正则表达式     | + ? {}

用法

 *  代表前面的字符可以出现0次或者N次

? 代表前面的字符可以出现1次或者0次     a?   --> a

[...]  代表范围内任意一个字符    [a-Z]  、[0-9]  代表0,1,2,3,4,5,6,7,8,9 任意一个

[^...]  代表范围外任意一个字符

{1,7}  代表前面的字符出现1次到7次    {2} 表示前面的字符出现2次


+  代表前面的字符出现1到多次      a+   -->  a   aa   aaaaaaaa

^   代表以什么开头

$  代表以什么结尾

^$   代表空行

.    代表任意一个字符

.*    代表所有的字符

|   或者

\<    表示词首部   相当于\b

\>    表示词尾部   相当于\b

\< abc \>  表示abc这个单词  等价于  \b abc \b

[root@web1 lianxi]# cat sc.txt 
liquan123   liquanabc    fengliquan   zhangliquan123
liquan
xiaoliquan
xiaoliquanliu
[root@web1 lianxi]# cat sc.txt |egrep "\<liquan"
liquan123   liquanabc    fengliquan   zhangliquan123
liquan
[root@web1 lianxi]# cat sc.txt |egrep "\<liquan\>"
liquan
[root@web1 lianxi]# cat sc.txt |egrep "liquan\>"
liquan123   liquanabc    fengliquan   zhangliquan123
liquan
xiaoliquan
[root@web1 lianxi]# cat sc.txt |egrep "liquan\b"
liquan123   liquanabc    fengliquan   zhangliquan123
liquan
xiaoliquan
[root@web1 lianxi]# cat sc.txt |egrep "\bliquan"
liquan123   liquanabc    fengliquan   zhangliquan123
liquan
[root@web1 lianxi]# cat sc.txt |egrep "\bliquan\b"
liquan

选项:

-i   不区分大小写

-n   显示行号

-o   仅展示筛选出来的(对于字符串)

-A   在什么之后

-B   在什么之前

-C   上下文

-v   取反  (整行)    [^0-9]对单个字符串取反

-r   递归查找

-E   对扩展正则的支持  相当于使用egrep

PATTERN 模式(模型,模子,模板) 由字符串+正则表达式组成

例子:

“sc[0-9]+feng+de$"     -->  这就是模式

^feng   以feng开头的
bash$   以bash结尾的
^feng[0-9]   以feng0,feng1,···,feng9中任意一个开头
123[a-z]        代表123a,123b,123c,···,123z
^[0-9]+$    全是数字的

ip地址正则:

A类ip地址的正则-->1~126.0~255.0~255.0~255

将1-126划分为4段,1-9、10-99、110、119、120-126

将0-255划分为5段,0-9、10-99、100-199、200-249、250-255

([1-9]|[1-9][0-9]|1[01][0-9]|12[0-6])(\.([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])){3}

  

B类ip地址正则-->128~191.0~255.0~255.0~255

将128-191划分为3段,128-129、130-189、190-191

将0-255划分为5段,0-9、10-99、100-199、200-249、250-255

(12[89]|1[3-8][0-9]|19[01])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}

C类ip地址正则-->192~223.0~255.0~255.0~255

将192-223划分为3段,192-199,200-219,220-223

将0-255划分为5段,0-9、10-99、100-199、200-249、250-255

(19[2-9]|2[0-1][0-9]|22[0-3])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}


1.进入/lianxi目录,复制/etc/passwd到当前目录下,然后对passwd进行操作

2、查找出当前passwd文件中以ftp或者mail开头的行,在屏幕上输出。
cat passwd |egrep "^ftp|^mail"

3、查找出当前passwd文件中首行不是以r、m、f开头的行,在屏幕上输出。
cat passwd |egrep -v "^[rmf]"
egrep -v "^r|^m|^f" passwd

4、查找出当前passwd文件中以bash结尾的行。
cat passwd | grep "bash$"

5、查找出/etc/login.defs文件中的有效行(不显示空行和注释行)。
cat /etc/login.defs|egrep -v "^$|^#"

6、查找出/var/log/messages文档中有16个字母的单词?
cat /var/log/messages |egrep "\b[a-Z]{16}\b"

7、查找出来/etc/passwd文件里用户名包含liu同时使用bash的用户
cat /etc/passwd|egrep ".*liu.*:x.*bash$"

8、查找/etc/ssh/sshd_config 里的有效行(不显示空行和注释行)
cat /etc/ssh/sshd_config|egrep -v "^$|^#"

9、查找出/etc/ssh/sshd_config 文件里的包含连续2个数字的行
cat /etc/ssh/sshd_config| grep "\<[0-9][0-9]\>"
cat /etc/ssh/sshd_config| egrep "\<[0-9]{2}\>"

10、查找出/etc/ssh/sshd_config 包含特殊字符的行
cat /etc/ssh/sshd_config| egrep -o "[^0-Z]"

11、查找出/etc/ssh/sshd_config 不包含数字的行
cat /etc/ssh/sshd_config|grep -v "[0-9]"

12、查找出/var/log/secure里的ip地址出来
egrep -o "[0-25]?[0-9]+\.[0-25]?[0-9]+\.[0-25]?[0-9]+\.[0-25]?[0-9]+"  /var/log/secure

13、查找出/etc/ssh/sshd_config里包含port字符的行和后5行的内容
egrep -A5 "port" /etc/ssh/sshd_config

13、写一个表示下面网址的正则表达式出来。例如:
	vim web.txt 内容如下:
	http://www.baidu.com
	http://www.sina.com
	https://www.163.com
	http://www.12306.cn
	http://www.qillu.edu
	rsync://www.github.com/abc
	ftp://192.168.0.1
	ftp://www.baidu.com

	协议://字符串.字符串.字符串

要求你了解正常的网站的地址
cat web.txt|egrep "(http|https|ftp|rsync)://[0-Z]+\.[0-Z]+\.[0-Z]+.*"

14、写一个表示邮箱的正则
	vim  mail.txt 内容如下:
	feng@qq.com
	1234feng@163.com
	meng.xianhui@yahoo.cn
	liudehua@sina.com
	10001@qq.com
	123_ui@12306.cn
	fengdeyong 123
	qilu@qilu.edu
	qilu@qilu.edu/fjdkfjk/fjdk

	字符串@字符串.字符串

需要你了解正常的邮箱的格式
cat mail.txt|egrep -o "[0-Z_]+@[0-Z]+\.[0-Z]+"

用法脚本练习:

批量新建用户并设置密码

#!/bin/bash

#author: zhou
#time: 2023-3-7
#company: nongda
#mail: 1111111@qq.com
#description:  批量新建用户,并且设置密码


#清空文件
>user_pwd.txt
username=$1
#对用户名进行检测,如果全部是数字,提醒用户,停止脚本运行
#if echo $username |egrep "^[0-9]+$"  &>/dev/null;then
if  [[ $username =~ ^[0-9]+$  ]];then
	echo "用户名全部是数字,请重新输入用户名"
	#退出脚本,停止执行
	exit
fi
#批量新建用户,并且设置密码
for  i  in $(seq $2)
do
	#判断用户是否存在
	if id $username$i &>/dev/null ;then
		echo "$username$i 已经存在"
	else
		useradd $username$i
		#生成密码
		u_pwd=$(mkpasswd  -l 30 -d 5 -C 5 -s 3)
		echo $u_pwd |passwd --stdin $username$i &>/dev/null
		echo  "$username$i  $u_pwd" >>user_pwd.txt
	fi
done
echo "新建用户并且设置密码成功"

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值