linux正则一!

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 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
相关文章
|
存储 安全 Java
ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别?
ArrayBlockingQueue 和 LinkedBlockingQueue 有什么区别?
|
机器学习/深度学习 运维 算法
梯度&散度&旋度&峰度&偏度你分得清楚吗?驻点&鞍点你分得清楚吗?曲率&斜率你分得清楚吗?
本文介绍了四种常见的物理量:加速度,速度,位移和力学功。详细介绍了它们的定义、计算以及在物理学和工程学领域中的应用。此外,本文还介绍了四种与物理量相关的概念:向量、标量、质量和密度。 数学,物理,机器学习领域常见概念区分
2154 0
|
存储 文件存储 对象存储
S3存储服务间数据同步工具Rclone迁移教程
目前大多项目我们都会使用各种存储服务,例如oss、cos、minio等。当然,因各种原因,可能需要在不同存储服务间进行数据迁移工作,所以今天就给大家介绍一个比较通用的数据迁移工具Rclone。
S3存储服务间数据同步工具Rclone迁移教程
|
11月前
|
网络协议 Linux 应用服务中间件
linux正则二!
本文档详细介绍了正则表达式及其在 Linux 中的应用,包括基本正则和扩展正则的常用符号,以及如何使用 `grep`、`sed` 和 `awk` 命令进行文本处理。通过丰富的实例和练习,帮助读者掌握正则表达式的使用方法,提高文本处理能力。文档还涵盖了实际工作中常见的需求,如排除配置文件中的注释行、查找进程、提取 IP 地址等,使读者能够将所学知识应用于实际场景。
159 0
linux正则二!
|
数据采集 存储 自然语言处理
python爬虫分类和robots协议 | python爬虫实战之一
本节介绍了爬虫的由来,爬虫的基本流程,以及爬虫如何来获得一个新的URL,还对robot协议作出一些简单地介绍。
python爬虫分类和robots协议 | python爬虫实战之一
|
11月前
|
Java 应用服务中间件 Linux
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
本文主要讲解了Docker的安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库以及Docker容器虚拟化与传统虚拟机比较。
12235 38
【Docker容器化技术】docker安装与部署、常用命令、容器数据卷、应用部署实战、Dockerfile、服务编排docker-compose、私有仓库
|
11月前
|
缓存 监控 Linux
linux进程管理万字详解!!!
本文档介绍了Linux系统中进程管理、系统负载监控、内存监控和磁盘监控的基本概念和常用命令。主要内容包括: 1. **进程管理**: - **进程介绍**:程序与进程的关系、进程的生命周期、查看进程号和父进程号的方法。 - **进程监控命令**:`ps`、`pstree`、`pidof`、`top`、`htop`、`lsof`等命令的使用方法和案例。 - **进程管理命令**:控制信号、`kill`、`pkill`、`killall`、前台和后台运行、`screen`、`nohup`等命令的使用方法和案例。
772 4
linux进程管理万字详解!!!
|
11月前
|
Linux 文件存储 Windows
linux软连接详解!!!
本文介绍了Linux文件类型、文件属性、文件存储机制以及软链接和硬链接的概念。主要内容包括:Linux文件类型及其识别方法、文件属性的组成及查看方式、inode和block的作用、软链接和硬链接的区别及应用场景。通过具体示例,帮助读者理解Linux文件系统的运作原理。
662 2
linux软连接详解!!!
|
11月前
|
运维 网络协议
IP地址与子网划分:IPv4与IPv6地址规划及子网掩码计算详解
IP地址与子网划分:IPv4与IPv6地址规划及子网掩码计算详解
3219 3
|
11月前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
171 1

热门文章

最新文章