shell中的文本处理正则表达式

grep

 grep的格式
    grep 匹配条件 匹配文件
    grep root passwd(贪婪模式)
    grep ^root	 passwd		以root开头
    grep bash$	passwd		以bash结尾
    grep -i root 	passwd		不区分root大小写
    grep -v root passwd		反向过滤(展示除符合条件外的信息)
    grep ^root|bash$ passwd 展示以root开头或者以bash结尾的用户
    grep -2 games passwd 展示符合条件及其前后两条的信息
    grep -A2 games passwd展示符合条件及其后两行的信息
    grep -B2 games passwd展示符合条件及其前两行的信息
    
	grep的字符匹配次数设定
	*	字符出现[0-任意次]
	*? 字符出现[0-1次]
	\+ 字符出现[1-任意次]
	\{n\} 字符出现[n]次
	|{m,n\} 字符出现[最少出现m次,最多出现n次]
	\{0,n\} 字符出现[0-n次]
	\{m,\} 字符出现[至少m次]
	\(xy\){n\}xy xy关键字出现[n次]
	.* 关键字之间匹配任意字符

grep root passwd 查找文件中含有root的信息
在这里插入图片描述
grep ^root passwd 查找文件中以root为开头的信息

在这里插入图片描述
查看文件中以bash结尾的信息
在这里插入图片描述
grep ‘w…s’ file1查看文件file1中w与s见有两个字符的信息(一个‘.’表示一个字符)
grep ‘ws’ file1查看文件file1中w与s相连两个字符的信息
grep ‘w.s’ file1查看文件file1中w与s见有一个字符的信息(一个‘.’表示一个字符)
grep ‘w…s’ file1查看文件file1中w与s见有六个字符的信息(一个‘.’表示一个字符)
在这里插入图片描述
查看可以登陆的用户
grep $sh /etc/passwd | cut -d : -f 1
在这里插入图片描述
grep -B2 games passwd 查看paswd文件中games的文件及其前两行(Before)

grep -A2 games passwd 查看passwd文件中game的信息及其后两行(After)
在这里插入图片描述
sed命令

  sed参数
  	-e	两个参数并列,每一个参数之前都要加,也可以通‘; ’实现该功能
  	-n	取消默认输出
  	-i	修改内容写入文件
  	-f	指定文件内容作为参数
  	"=" 大银行书
  	" $ ="	打印文件总行数
  	"^$"	空白行
  	a 行添加
  	c	行替换
  	i	行插入
  	d	行删除
  	w 写入文件
  	r	插入文件
  	s#原内容#新内容#g(替代全文内容 ,分隔符#可以被/或@替代)
  
   sed -n '4p;5p' /etc/fstab 打印文件/etc/fstab的第四行和第五行
   sed -n '4,6p' /etc/fstab 打印文件/etc/fstab的第四行到第六行
   sed -n '/#/p' /etc/fstab打印文件/etc/fstab的含有‘#’的行
   sed -n '/#/!p' /etc/fstab 打印文件/etc/fstab的不含有‘#’的行
   sed -n '/^$/!p' /etc/fstab 打印文件/etc/fstab中的非空行

sed -n ‘4p;5p’ /etc/fstab 打印文件/etc/fstab的第四行和第五行
在这里插入图片描述
sed -n ‘4,6p’ /etc/fstab 打印文件/etc/fstab的第四行到第六行在这里插入图片描述
sed -n ‘/#/p’ /etc/fstab打印文件/etc/fstab的含有‘#’的行
在这里插入图片描述
sed -n ‘/#/!p’ /etc/fstab 打印文件/etc/fstab的不含有‘#’的行
在这里插入图片描述
sed -n ‘/^$/!p’ /etc/fstab 打印文件/etc/fstab中的非空行
在这里插入图片描述
跳转到/mnt目录下并复制/etc/fstab到/mnt下,并打印该文件行数
在这里插入图片描述 sed ‘s@#@2333@g’ fstab 替换全文的#
在这里插入图片描述
sed ‘1,3d’ fstab删除文件fstab的1-3行在这里插入图片描述
替换全文的#符为2333
在这里插入图片描述
指定文件file为过滤参数
在这里插入图片描述
给文加fstab的第三行插入文件file
在这里插入图片描述
编写脚本,使得脚本自动添加规定文件的用户到可登陆用户中。

#!/bin/bash
[ -z "$1" ] && {
	echo "ERROR : please input userfile following script"  ##加入要打印的用户文件
	exit
}
[ ! -e "$1" ] && {
	echo "$1 is not exist"  ##该用户文件不存在
	exit
}Max_Num=`wc -l $1 | cut -d " " -f 1` ##统计用户文件中的用户个数
for Line_Num in `seq 1 $Max_Num`
do
	USERNAME=`sed -n ${Line_num}p $1` 
	id $USERNAME &> /dev/null && {
		echo $USERNAME is exist! ##若用户存在提示该用户已存在
	}||{
	useradd $USERNAME ##用户不存在则添加到用户列表中
	}
done 

awk
1、打印文件的第一列(域) : awk ‘{print $1}’ filename
2、打印文件的前两列(域) : awk ‘{print $1,$2}’ filename
3、打印完第一列,然后打印第二列 : awk ‘{print $1 $2}’ filename
4、打印文本文件的总行数 : awk ‘END{print NR}’ filename
5、打印文本第一行 :awk ‘NR1{print}’ filename
6丶打印文本第一行第一列 awk ‘NR
1{print $1}’ filename
-F 分隔符
awk ‘{print FILENAME}’ 打印文件名
‘{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲' 打印第二列 '/bash/’ 打印以bash结尾的文件
'^root’打印以root为开头的文件
'$6!~/^/home/ 第六行不以/home为开头的文件
'$6~/^/home/ 第六行以/home为开头的文件

awk ‘{print FILENAME}’ passwd打印文件名passwd
在这里插入图片描述
awk -F : ‘{print $2}’ passwd 以‘:’为分隔符,打印文件passwd的第二列
在这里插入图片描述

awk -F : ‘BEGIN{print “hello”}{print $2}’ /etc/passwd | head -n 3 在开头加入hello
在这里插入图片描述

awk -F : ‘{print $2}END{print “end”}’ /etc/passwd | tail -n 3 在结尾加入end
在这里插入图片描述

awk ‘/^root/’ /etc/passwd
在这里插入图片描述
awk ‘/bash$/’ passwd 打印文件passwd以bash结尾的信息
在这里插入图片描述

awk -F : ‘/bash$/{print $1}’ passwd 打印以‘:’为分隔符,文件passwd中以bash结尾的第一列信息
在这里插入图片描述

[root@localhost shell]# ip addr show eth1
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 02:63:8c:d0:9d:4d brd ff:ff:ff:ff:ff:ff
    inet 192.168.52.106/16 brd 192.168.255.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::63:8cff:fed0:9d4d/64 scope link
       valid_lft forever preferred_lft forever
[root@localhost shell]# ip addr show eth1 | awk -F ' ' 'NR==3{print $2}' | cut -d '/' -f 1
192.168.52.106

awk -F : ‘/nologin$/{print $1}’ /etc/passwd | wc -l 输出以‘:’为分隔符,/etc/passwd文件中nologin结尾的行数。
在这里插入图片描述
在这里插入图片描述
awk -F : ‘$6~/^/home/{print}’ /etc/passwd 打印文件/etc/passwd中第六行以/home开头的文件
在这里插入图片描述

awk -F : ‘$6!~/^/home/{print $1}’ /etc/passwd 打印文件/etc/passwd中第六列不已/home开头的文件的第一列(用户)
在这里插入图片描述
awk -F : ‘BEGIN{N=0}$6!~/^/home/{N++}END{print N}’ /etc/passwd打印文件/etc/passwd中第六列不已/home开头的文件的第一列(用户)的数量
在这里插入图片描述
编写脚本查看输入设备的ip

  #!/bin/bash
    [ -z "$1" ] && {
        echo "ERROR : please input device following test"
        exit
    }
    ifconfig $1 &> /dev/null || {
        echo "$1 is not exist"
        exit
    }
    ifconfig $1|awk -F ' ' '/inet\>/{print $2}'

不加入设备报错
在这里插入图片描述
加入不存在设备报错
在这里插入图片描述
查看eth0的ip
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值