Linux通配符和正则表达式

本文详细讲解了Linux中的通配符和正则表达式的使用方法,包括它们的区别、基本语法、应用场景以及如何结合Linux三剑客进行实际操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Linux通配符和正则表达式

Linux通配符和正则表达式是不一样的,通配符一般用于用户命令行bash环境,而正则表达式用于三剑客匹配

1、通配符知识:一般用户命令行bash环境,注意区别正则表达式中的含义

*  --代表所有(0个或多个)字符 如:*.sh 匹配所有以 .sh 结尾的文件
? --任意一个字符
; --连续不同命令的分隔符
#  --配置文件的注释
|  --管道符
~  --当前用户的家目录
-  --上一次所在路径
/  --路径分隔符,也是根的意思
`  --反引号中间为命令会先执行,等价于 $()
“  --双引号具有变量置换功能,解析变量后输出,不加引号相当于双引号
‘  --单引号不具有变量置换功能,输出所见即所得(原样输出)
.. --代表上一级目录

2、正则表达式(*)

(1)什么是正则表达式?

​ 为处理大量的字符串而定义的一套规则和方法

注:正则表达式一般以行为单位处理

(2)为什么要学会正则表达式

​ 正则表达式是为了处理大量字符串而生的。Linux运维每天面临大量的配置文件和日志文件。正则表达式也会用到Python、Java、php等语言。

本笔记以grep(egrep)为例展开讨论:所以希望输出高亮显示
# alias grep='grep --color=auto'
注意字符集:可能带来问题
# export LC_ALL=C

(3)自动文件结尾

#cat >>file.txt << HAN    写一个文件,显式提示以HAN为文件结尾
I like linux!
My name is hanmenghao!
HAN

cat file.txt

(4)常用标识符及补充 (只要是字符串需双引号引起来)

^word: 以word开头的行
word$: 以word结尾的行
^$: 代表空行    如:过滤掉空行    grep -v "^$" filename
. :匹配任意一个字符
\ :转义字符,脱掉特殊字符的特殊含义
* :匹配所有字符,重复前面字符0次到多次
.*: 匹配所有字符
^.*: 匹配以任意多个字符开头的项
.*$:匹配以任意多个字符结尾的项
[abc] : 匹配abc任意一项
[^abc] : 匹配不包含abc任意一项的项
a\{m,n\} : 匹配a至少m次,最多n次
a\{m,\} : 匹配a至少m次
a\{m\} : 匹配a恰好m次
a\{\,m} : 匹配a最多m次
\<  \>:单词定位符    \< 和 \> 用于匹配一个字词的开头和结尾
\<han :以han开头的单词     han\> :以han 结尾的单词     \<han\> : 精确匹配单词 han

(5)扩展正则表达式(了解即可) egrep或(grep -E)

+ : 重复前面的字符1次或多次
?: 重复前面的字符0次或1次
| : 表示同时过滤多个字符串  如: # egrep "3306|1521" /etc/services  匹配3306或1521
() : 分组过滤,或后项引用    如: # egrep "g(la|oo)d" filename
(han) :把han 当作一项,整串匹配

(6)元字符

\b : 单词边界    如: egrep "\bfile\b" filename  //仅过滤file
\n : 换行符
\r : 回车、
\t : 一个tab键

(7)正则表达式结合三剑客企业案列

1、用正则表达式获取系统ip
[root@server ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.224.137  netmask 255.255.255.0  broadcast 192.168.224.255
        inet6 fe80::c558:9c2b:4d2:1e04  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:da:24:fe  txqueuelen 1000 
        
法1:# ifconfig ens33|sed -n '2p'|sed 's#^.*et ##g'|sed 's#  net.*$##g'
法2:# ifconfig ens33|sed -nr 's#[^1]+(.*) net.*$#\1#gp'  p代表输出
法3:# ifconfig ens33|awk -F "[ ]+" 'NR==2 {print $3}'
法4:# grep IPADDR /etc/sysconfig/network-scripts/ifcfg-ens33|cut -d= -f2

2、取出/etc/hosts文件第4行的权限644
第4行内容:Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
# stat /etc/hosts|sed -nr '4s#^.*\(0(.*)\/-.*$#\1#gp'

3、将/etc/passwd中的第1列和最后一列进行对调
# sed -nr 's#([^:]+)(:.*:)(/.*$)#\3\2\1#gp' /etc/passwd

4、把一个文件的字母组合权限转换成数字权限
stat 用来查看文件属性
# touch /ettt
法1:# ls -l /ettt |cut -c2-10| tr "rwx-" "4210" |awk -F "" '{print $1+$2+$3""$4+$5+$6""$7+$8+$9}'
法2:stat /ettt|sed -nr 'S#^.*\(0(.*)/-.*$#\1#gp'
法3:stat /ettt|awk -F "[0/]" 'NR==4 {print $2}'
法4: stat -c %a /ettt

重要思想:
当命令的结果包含我们需要的内容时,我们要想到命令的参数是否有具体的参数能一步达到我们的需求,此时可以 man 命令 来寻找!
2个思路:
  1、取行的惯用命令:通过 head、tail、sed、awk、grep定位到单行
  2、取列的惯用命令:通过 cut、awk等设置分隔符取出需要的段内容

5、请给出默认情况ens33网卡配置文件的路径及客户端DNS路径
网卡配置文件:/etc/sysconfig/network-scripts/ifcfg-ens33
DNS客户端路径:/etc/resolv.conf

(7)shell的特殊位置变量

$0 : 文件名及路径
$1,$2:给脚本传参用的,代表第一个,第二个参数
$* : 把所有参数集合成一项输出
$#: 一共传了几个脚本
$?:上一个脚本的返回值
$$ : 脚本的PID
$@:所有参数分行输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Star星屹程序设计

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

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

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

打赏作者

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

抵扣说明:

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

余额充值