linux正则一!

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: 本文介绍了Linux中的通配符和shell命令行特殊符号。通配符包括`*`、`?`、`[]`等,用于文件名匹配;特殊符号如`~`、`$()`、`&&`、`||`等,用于路径操作、命令执行和控制流程。通过具体示例,详细解释了每种符号的用法和应用场景。

[TOC]

第1章 通配符号

1.什么是通配符

1.通配符的作用是查找和匹配文件名称而不是文件里的内容!
2.通配符是shell的内置功能
3.Linux大部分命令都支持通配符

2.常用符号说明

*            匹配任意(0个或多个)字符或字符串,包含空字符串
?          匹配任意1个字符,有且只有一个字符
[abcd]      匹配[abcd]中任何一个字符,abcd也可是其他任意不连续字符
[a-z]       匹配a-z之间的任意一个字符
[0-9]        匹配0-9之间的任意一个数字
[a-Z]       匹配a-zA-Z之间的任意一个数字
[!abcd]     不匹配括号里面的任意字符,也可以写作[!a-d],这里的!可以用^替代,即[^abcd]

3.通配符练习

3.1 创建测试环境

mkdir test
cd test/
touch oldboy.txt oldgirl.txt test.txt oldzhang.sh
ls

3.2 * 匹配任意字符

#1.查看所有结尾为txt的文件
[root@centos7 test]# ls *.txt
oldboy.txt  oldgirl.txt  test.txt

#2.查看以sh结尾的文件
[root@centos7 test]# ls *.sh
oldzhang.sh

#3.查找以old开头,txt结尾的文件
[root@centos7 test]# ls old*.txt
oldboy.txt  oldgirl.txt

3.3 ? 匹配任意一个字符(用的不多,了解即可)

#1.尝试匹配?.sh
[root@centos7 test]# ls ?.sh                
ls: 无法访问?.sh: 没有那个文件或目录    #这里报错了,为什么呢,因为?只代表任意一个字符,因此没有符合条件的文件

#2.创建一个符合条件的文件再次查找
[root@centos7 test]# touch a.sh
[root@centos7 test]# ls ?.sh   
a.sh

#3.那么如何查找特定字符长度的文件名呢?
[root@centos7 test]# ls *.sh
a.sh  oldzhang.sh
[root@centos7 test]# ls ????????.sh            #使用8个?就匹配了
oldzhang.sh

3.4 [] 匹配指定的内容

#1.查找匹配a-z任意一个字符的以.sh结尾的文件
[root@centos7 test]# ls [a-z].sh
a.sh

#2.匹配以old开头后 + xyz任意一个字符 + hang.sh结尾的文件
[root@centos7 test]# ls old[xyz]hang.sh
oldzhang.sh

#3.复杂一点的匹配,其实很好理解
[root@centos7 test]# ls old[a-z]???g.sh
oldzhang.sh

3.5 [!abcd] 取反匹配指定的内容

#1.排除所有以o开头的任意名称并且以.txt结尾的文件
[root@centos7 test]# ls [!o]*.txt
test.txt

#2.排除所有以o开头的任意名称并且以.sh结尾的文件
[root@centos7 test]# ls [!o]*.sh
a.sh

#3.排除所有以a开头的任意名称并且以.sh结尾的文件
[root@centos7 test]# ls [!a]*.sh
oldzhang.sh

3.6 通配符综合练习

#1.查找/etc目录下包含hosts字符串的所有文件
[root@centos7 ~]# find /etc -type f -name "*hosts*"
/etc/hosts
/etc/hosts.allow
/etc/hosts.deny

#2.查找/etc目录下所有网卡配置文件
[root@centos7 ~]# find /etc -type f -name "ifcfg-*"
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-eth0

#3.只查找包含了数字的网卡配置
[root@centos7 ~]# find /etc -type f -name "ifcfg-*[0-9]"
/etc/sysconfig/network-scripts/ifcfg-eth0

#4.查找/dev目录下第1块到第4块磁盘文件
[root@centos7 ~]# find /dev/ -name "sd[a-d]"
/dev/sdd
/dev/sdc
/dev/sdb
/dev/sda

#5.查找/dev/sda一共有几个分区
[root@centos7 ~]# find /dev/ -name "sda?"    
/dev/sda2
/dev/sda1
[root@centos7 ~]# find /dev/ -name "sda[0-9]"
/dev/sda2
/dev/sda1
[root@centos7 ~]# find /dev/ -name "sda*"    
/dev/sda2
/dev/sda1
/dev/sda

第2章 shell命令行特殊符号

1.什么是shell命令行特殊符号

相比通配符来说,Linux特殊符号更加复杂,且杂乱无章,但是, 要想成为一个合格的Linux运维工程师,就必须要掌握这些特殊符号。

2.常用shell命令行特殊符号说明

2.1 路径相关

~    用户家目录
-    上一次目录
.    当前目录
..   上一层目录

2.2 引号相关

''    单引号,所见即所得
""    双引号,可以解析变量和引用命令
``    反引号,可以解析命令
      无引号,类似于双引号,但是有歧义

2.3 重定向符号

<        标准输入
>       标准正确重定向
>>      标准正确追加重定向
2>      标准错误重定向
2>>     标准错误追加重定向

2.4 命令运行

&&     前面执行成功后面才执行
||     前面执行失败后面才执行
;      不管前面是否执行成功,都执行后面的命令
\      转义特殊字符,还原字符本来的含义
$()    优先执行小括号里的命令,并且结果可以被其他命令使用  
``     同$()效果一样,但是容易和单双引号搞混
$?     上一条命令执行的结果
|      管道
{}     生成序列

3.引号实验

3.1 单引号

使用时间命令作为测试

[root@centos7 ~]# date
2021年 04月 12日 星期一 21:48:21 CST
[root@centos7 ~]# echo 'date'
date
[root@centos7 ~]# echo '$?'
$?
[root@centos7 ~]# echo '$PATH'
$PATH

结论:

单引号里的内容所见即所得,单引号引起来的内容是什么,输出就是什么,不会任何改变,特殊符号也会失去特殊含义。

3.2 反引号

[root@centos7 ~]# echo `date`
2021年 04月 12日 星期一 21:55:39 CST
[root@centos7 ~]# echo `pwd` 
/root
[root@centos7 ~]#

结论:

简单来说,当将待处理的字符串用反引号引起来的时候,系统首先会将反引号里字符串当作命令进行解析,然后针对解析后的结果做进一步的处理。

3.3 双引号

[root@centos7 ~]# echo "date"
date
[root@centos7 ~]# echo "`date`"
2021年 04月 12日 星期一 21:55:11 CST

[root@centos7 ~]# echo "$PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

结论:

1.当输出双引号内的所有内容时,如果内容中有命令(要反引一 下)、变量、特殊转义符等,则会先将变量、命令、转义字符解析出来,然后输出最终的内容。
2.若在平时引用字符串时,不知道应该如何引用,则可以默认使用双引号

3.4 无引号

[root@centos7 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@centos7 ~]# echo $?
0

结论:

不使用引号的功能与双引号类似,但由于没有引号,很难确定字符串的边界,因此很容易出现各种未知的操作错误

4.特殊符号练习

因为路径和重定向在基础命令阶段已经讲过,所以这里不再练习这两块内容。

4.1 && 前面命令执行成功才会执行后面的命令

#1.创建目录执行成功,就进入到这个目录里
[root@centos7 ~]# mkdir /data && cd /data
[root@centos7 data]#

#2.如果前面的命令执行失败,不会执行后面的命令
[root@centos7 ~]# pwd
/root
[root@centos7 ~]# mkdir /data && cd /data
mkdir: 无法创建目录"/data": 文件已存在
[root@centos7 ~]# pwd
/root

4.2 || 前面命令执行不成功才会执行后面的命令

#1.如果目录已经存在则切换到/opt目录下
[root@centos7 ~]# mkdir /data || cd /opt  
mkdir: 无法创建目录"/data": 文件已存在
[root@centos7 opt]# pwd
/opt

#2.如果创建目录成功,就不执行后面的命令
[root@centos7 ~]# mkdir /data3 || cd /opt 
[root@centos7 ~]# pwd
/root

4.3 ; 分隔多个命令

[root@centos7 ~]# mkdir /data;echo 123;cd /opt/;pwd
mkdir: 无法创建目录"/data": 文件已存在
123
/opt
[root@centos7 opt]#

4.4 $() 引用命令

#1.引用时间命令创建文件,命名为时间.txt
[root@centos7 ~]# touch $(date +%F).txt
[root@centos7 ~]# ll
总用量 0
-rw-r--r-- 1 root root 0 4月  12 21:44 2021-04-12.txt

#2.rm结合find命令删除文件
[root@centos7 ~]# find . -type f -name "*.txt"
./2021-04-12.txt
[root@centos7 ~]# rm -rf $(find . -type f -name "*.txt")
[root@centos7 ~]# ll
总用量 0
[root@centos7 ~]#

4.5 {} 生成序列

#1.生成序列
[root@centos7 ~]# echo {1..10} 
1 2 3 4 5 6 7 8 9 10
[root@centos7 ~]# echo {a..g}
a b c d e f g

#2.特殊应用
[root@centos7 ~]# cp /etc/profile{,.bak}
[root@centos7 ~]# ll /etc/profile*
-rw-r--r--. 1 root root 1835 12月 13 11:25 /etc/profile
-rw-r--r--  1 root root 1835 4月  13 08:11 /etc/profile.bak

#3.变量分隔符
[root@centos7 ~]# name=zhang
[root@centos7 ~]# echo $name
zhang
[root@centos7 ~]# echo $name_ya

[root@centos7 ~]# echo ${name}_ya
zhang_ya
目录
相关文章
|
20天前
|
网络协议 Linux 应用服务中间件
linux正则二!
本文档详细介绍了正则表达式及其在 Linux 中的应用,包括基本正则和扩展正则的常用符号,以及如何使用 `grep`、`sed` 和 `awk` 命令进行文本处理。通过丰富的实例和练习,帮助读者掌握正则表达式的使用方法,提高文本处理能力。文档还涵盖了实际工作中常见的需求,如排除配置文件中的注释行、查找进程、提取 IP 地址等,使读者能够将所学知识应用于实际场景。
41 0
linux正则二!
|
运维 Linux Perl
Linux-正则三剑客(1)
Linux-正则三剑客
74 0
|
Perl
Linux-正则三剑客(2)
Linux-正则三剑客(1)
62 0
|
Linux Perl
Linux-正则三剑客(3)
Linux-正则三剑客(1)
73 0
|
机器学习/深度学习 NoSQL Linux
Linux行处理工具: grep 正则表达式
Linux行处理工具: grep 正则表达式
113 0
|
Linux 数据安全/隐私保护 Perl
Linux 的正则表达式
我们通过sed或awk工具可以轻松愉快的对一堆文本分析、对数据进行处理、服务器报错日志的分析、服务器用户访问日志统计分析等。但是要玩耍好sed和awk工具,正则表达式是基础,不得不掌握。
486 0
Linux 的正则表达式
|
Linux Perl
Linux正则表达式
文本处理工具中的三剑客--grep、sed、awk.grep是根据模式过滤文本,并将符合模式的行显示出来,grep是一组工具集,包括了grep,egrep, fgrep
|
Linux Shell Perl
17个案例带你3分钟搞定Linux正则表达式
正则表达式是一种字符模式,用于在查找过程中匹配制定的字符。 元字符通常在Linux中分为两类: Shell元字符,由Linux Shell进行解析; 正则表达式元字符,由vi/grep/sed/awk等文本处理工具进行解析; 正则表达式一般以文本行进行处理,在进行下面实例之前,先为grep命令设置--color参数: $ alias grep='grep --color=auto' 这样每次过滤出来的字符串都会带色彩了。
5973 0
下一篇
无影云桌面