Linux Shell 通配符、元字符、转义符使用实例介绍

shell通配符(wildcard),大家在使用时候会经常用到。下面是一个实例:
#1
[chengmo@localhost ~/shell]$ ls
a.txt b.txt c.old

#2
[chengmo@localhost ~/shell]$ ls *.txt
a.txt b.txt

#3
[chengmo@localhost ~/shell]$ ls d*.txt
ls: 无法访问 d*.txt: 没有那个文件或目录

从上面这个实例,不知道大家有没有发现问题呢。我们先了解一下,通配符相关知识,再分
析下这个实例吧。

一、linux shell通配符(wildcard)
通配符是由shell处理的(不是由所涉及到命令语句处理的,其实我们在shell各个命令中
也没有发现有这些通配符介绍), 它只会出现在 命令的“参数”里(它不用在 命令名称里,
也不用在 操作符上)。当shell在“参数”中遇到了通配符时,shell会将其当作路径或文件
名去在磁盘上搜寻可能的匹配:若符合要求的匹配存在,则进行代换(路径扩展);否则就将
该通配符作为一个普通字符传递给“命令”,然后再由命令进行处理。总之,通配符 实际上
就是一种shell实现的路径扩展功能。在 通配符被处理后, shell会先完成该命令的重组,
然后再继续处理重组后的命令,直至执行该命令。

我们回过头分析上面命令吧:在第2个命令中,*.txt 实际shell搜索文件,找到了符合条
件的文件,命令会变成:ls a.txt b.txt ,实际在执行ls 时候传给它的是a.txt b.txt .

而命令3,d*.txt 由于当前目录下面没有这样的文件或目录,直接将”d*.txt” 作为ls 参
数,传给了 ls .这个时候”*” 只是一个普通的 ls 参数而已,已经失去了它通配意义。 由
于找不到文件,所以会出现:无法访问提示!

了解了shell通配符,我们现在看下,shell常见通配符有那一些了。
shell常见通配符:

字符 含义 实例

*
匹配 0 或多个字符
a*b a与b之间可以有任意长度的任意字符, 也可
以一个也没有, 如aabcb, axyzb, a012b, ab。

?
匹配任意一个字符
a?b a与b之间必须也只能有一个字符, 可以是任
意字符, 如aab, abb, acb, a0b。

[list]
匹配 list 中的任意单
一字符
a[xyz]b a与b之间必须也只能有一个字符, 但只

能是 x 或 y 或 z, 如: axb, ayb, azb。

[!list]
匹配 除list 中的任意a[!0-9]b a与b之间必须也只能有一个字符, 但不
单一字符
能是阿拉伯数字, 如axb, aab, a-b。

[c1-c2]
匹配 c1-c2 中的任意
单一字符 如:[0-9]
[a-z]

a[0-9]b 0与9之间必须也只能有一个字符 如

a0b, a1b... a9b。

{string1,string2,...}
匹配 sring1 或
string2 (或更多)其一
字符串

a{abc,xyz,123}b a与b之间只能是abc或xyz

或123这三个字符串之一。


需要说明的是:通配符看起来有点象正则表达式语句,但是它与正则表达式不同的,不能相
互混淆。把通配符理解为shell 特殊代号字符就可。而且涉及的只有,*,? [] ,{} 这几种。

二、shell元字符(特殊字符 Meta)
shell 除了有通配符之外,由shell 负责预先先解析后,将处理结果传给命令行之外,shell
还有一系列自己的其他特殊字符。
字符 说明
IFS
三者之一组成(我们常用 space )。
CR
产生。
=
设定变量。
$
作变量或运算替换(请不要与 shell prompt 搞混了)。
>
重导向 stdout。 *
<
重导向 stdin。 *
|
命令管线。 *
&
重导向 file descriptor ,或将命令置于背境执行。 *
( )
将其内的命令置于 nested subshell 执行,或用于运算或命令替换。 *
{ }
将其内的命令置于 non-named function 中执行,或用在变量替换的界定范围。
;
在前一个命令结束时,而忽略其返回值,继续执行下一个命令。 *
&&
在前一个命令结束时,若返回值为 true,继续执行下一个命令。 *
||
在前一个命令结束时,若返回值为 false,继续执行下一个命令。 *
!
执行 history 列表中的命令。*
加入”*” 都是作用在命令名直接。可以看到shell 元字符,基本是作用在命令上面,用作
多命令分割(或者参数分割)。因此看到与通配符有相同的字符,但是实际上作用范围不同。
所以不会出现混淆。

以下是man bash 得到的英文解析:
metacharacter
A character that, when unquoted, separates words. One of the
following:
| & ; ( ) < > space tab
control operator
A token that performs a control function. It is one of the following
symbols:
|| & && ; ;; ( ) |


三、shell转义符
有时候,我们想让 通配符,或者元字符 变成普通字符,不需要使用它。那么这里我们就需
要用到转义符了。 shell提供转义符有三种。

字符 说明

„‟(单引号)
又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。注意,硬转义中不允许
出现‟(单引号)。

“”(双引号) 又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换 `用于命令代替
\(反斜杠) 又叫转义,去除其后紧跟的元字符或通配符的特殊意义。
man bash 英文解释如下:
There are three quoting mechanisms: the escape character, single quotes, and
double quotes.

实例:

[chengmo@localhost ~/shell]$ ls \*.txt
ls: 无法访问 *.txt: 没有那个文件或目录

[chengmo@localhost ~/shell]$ ls '*.txt'
ls: 无法访问 *.txt: 没有那个文件或目录

[chengmo@localhost ~/shell]$ ls 'a.txt'
a.txt

[chengmo@localhost ~/shell]$ ls *.txt
a.txt b.txt


可以看到,加入了转义符 “*”已经失去了通配符意义了。
四、shell解析脚本的过程
看到上面说的这些,想必大家会问到这个问题是,有这么想特殊字符,通配符,那么 shell
在得到一条命令,到达是怎么样处理的呢?我们看下下面的图:
如果用双引号包括起来,shell检测跳过了1-4步和9-10步,单引号包括起来,shell检
测就会跳过了1-10步。也就是说,双引号 只经过参数扩展、命令代换和算术代换就可以
送入执行步骤,而单引号转义符直接会被送入执行步骤。而且,无论是双引号转义符还是单
引号转义符在执行的时候能够告诉各个命令自身内部是一体的,但是其本身在执行时是并不
是命令中文本的一部分。

合集下载

跟老男孩学linux三剑客命令

跟老男孩学linux三剑客命令
t匹配字母r然后两个任意字符再以l结尾的行比如rootr33l导字符包括回车aool匹配之后紧跟着ool的行比如abaab匹配b或ab匹配指定字符组内的任意一个字符abc匹配以字母a匹配不在指定字符组内任意一个字符abc匹配不以字母a子表达式组合rool表示一个或多个rool组合当有一些字符需要组合时使用括号括起来或者的意思rootb匹配root或者b匹配不匹配的条件语句1root匹配第一个字段包含字符root的所有记录root3需要注意一点的是root加括号和不root3加括号的区别x可以表示字符串也root56可以只是一个字符所以root5表示匹配roo再加上5个t及roottttt需要指定参数
1.2.1.awk 的原理 ......................................................................................................................5 1.2.2.BEGIN 和 END 模块 .........................................................................................................6 1.2.3.运算符 .............................................................................................................................6 1.2.4.常用 awk 内置变量 .........................................................................................................7 1.2.5.awk 正则 ........................................................................................................................10 1.3.awk 的 if、循环和数组............................................................................................................11 1.3.1 条件语句........................................................................................................................11 1.3.2.循环结构 .......................................................................................................................11 1.3.3.数组 ...............................................................................................................................13 1.4.1awk 常用函数表 .............................................................................................................14 1.4.2 字符串函数的应用........................................................................................................15 2.1.Sed 命令....................................................................................................................................16 2.1.1.Sed 简介.........................................................................................................................16 2.1.2.sed 工作过程.................................................................................................................16 2.1.3.Sed 命令格式.................................................................................................................16 2.1.4.报错信息和退出信息 .................................................................................................... 19 2.2.Sed 范例....................................................................................................................................19 2.2.1.Sed 测试实例.................................................................................................................19 2.2.2.打印:p 命令 ................................................................................................................19 2.2.3.删除:d 命令 ................................................................................................................20 2.2.4.替换:s 命令 .................................................................................................................21 2.2.5.指定行的范围:逗号 .................................................................................................... 22 2.2.6.多重编辑:e 命令.........................................................................................................23 2.2.7.追加:a 命令.................................................................................................................24 2.2.8.插入:i 命令..................................................................................................................24 2.2.9.修改:c 命令.................................................................................................................25 2.2.10.获取下一行:n 命令 ..................................................................................................25 2.2.11.转换:y,命令 ............................................................................................................ 25 2.2.12.退出:q 命令 ..............................................................................................................26 2.3.生产环境案例........................................................................................................................... 26 2.3.1.使用 sed 命令取出 IP 地址 ...........................................................................................26 2.4.总结 ..........................................................................................................................................28 3.1.Grep 命令..................................................................................................................................29 3.1.1.Grep 命令的介绍...........................................................................................................29 3.1.2.Grep 是如何工作的.......................................................................................................29 3.2.正则表达式元字符和选项 ....................................................................................................... 29

linux命令echo的用法

linux命令echo的用法

linux命令echo的用法echo命令是在Linux终端中使用的常见命令之一、它主要用于将文本输出到标准输出(通常是终端),也可以通过重定向操作将文本输出到文件。

下面是echo命令的一些常见用法及示例:1.输出文本到终端:```echo "Hello, World!"```输出结果:```Hello, World!```2.使用转义字符:```echo "Hello\nWorld"```输出结果:```World```3.输出变量的值:```name="John"echo "My name is $name"```输出结果:```My name is John```4.输出命令结果:```echo "Today is $(date)"```输出结果:```Today is Mon May 31 14:30:00 UTC 20245.输出多行文本:```echo "Line 1Line 2Line 3"```输出结果:```Line 1Line 2Line 3```6.将文本输出到文件:```echo "Hello, World!" > file.txt```将"Hello, World!"写入file.txt文件。

7.追加文本到文件:echo "More text" >> file.txt```将"More text"追加到file.txt文件的末尾。

8.输出空白行:```echo```输出一个空行。

9.显示特殊字符:```echo "This is a \"$special\" character"```输出结果:```This is a "$special" character```10.输出命令的帮助信息:```echo --help```输出echo命令的帮助信息。

powershell 正则表达式替换文件名中的中文字符 -回复

powershell 正则表达式替换文件名中的中文字符 -回复

powershell 正则表达式替换文件名中的中文字符-回复PowerShell是一种强大的脚本编程语言和自动化工具,它在Windows 操作系统中被广泛使用。

正则表达式是一种强大的文本处理工具,它可以用来匹配、查找和替换字符串。

在本文中,我们将讨论如何使用PowerShell 的正则表达式功能来替换文件名中的中文字符。

步骤1:了解正则表达式基础知识在开始之前,我们需要对正则表达式有一定的了解。

正则表达式是一种用于描述字符串模式的字符序列,它可以用来匹配、查找和替换字符串中特定的文本。

它由一系列字符和元字符组成,可以用来识别和匹配文本中的模式。

步骤2:编写PowerShell脚本接下来,我们需要编写一个PowerShell脚本来实现文件名中中文字符的替换。

首先,我们需要获取文件夹中的所有文件名,并对每个文件名应用正则表达式替换。

以下是一个简单的PowerShell脚本示例:powershellfolderPath = "C:\FolderPath" # 设置文件夹路径Get-ChildItem -Path folderPath ForEach-Object {newFileName = _.Name -replace"[\p{IsCJKUnifiedIdeographs}]","" # 使用正则表达式替换中文字符newFilePath = Join-Path -Path _.DirectoryName -ChildPath newFileName # 构建新的文件路径Rename-Item -Path _.FullName -NewName newFileName-Force # 重命名文件}步骤3:解释脚本的工作原理让我们逐行解释上述脚本的工作原理。

- 首先,我们定义了一个变量folderPath,用于存储文件夹的路径。

- 然后,使用Get-ChildItem命令获取指定文件夹中的所有文件,并通过ForEach-Object循环处理每个文件。

通配符注意事项

通配符注意事项

通配符注意事项通配符是计算机编程中用于匹配文件名或路径的特殊字符,主要有两个常用的通配符:星号(*)和问号(?)。

通配符可以在文件搜索、文件过滤和正则表达式等场景中起到很大的作用。

在使用通配符时,我们需要注意以下几点。

1. 星号(*)的使用:星号(*)代表任意多个字符,可以出现在文件名或路径的任意位置。

例如,使用通配符*.txt可以匹配所有以.txt结尾的文件名,而使用*hello*可以匹配包含hello的文件名。

需要注意的是,星号(*)不能匹配路径分隔符(通常是斜杠/或反斜杠\),也不能匹配隐藏文件(以.开头)。

例如,使用*/*.txt无法匹配子目录下的.txt文件,而使用.*.txt无法匹配以.开头的txt文件。

2. 问号(?)的使用:问号(?)代表任意一个字符,可以出现在文件名或路径的任意位置。

例如,使用通配符?.txt可以匹配一个任意字符加上.txt结尾的文件名,而使用??hello*可以匹配前两个字符是任意字符,后面以hello开头的文件名。

需要注意的是,问号(?)只能匹配一个字符,而不能匹配多个字符或空字符。

例如,使用??.txt无法匹配以两个字符开头的txt文件,而使用?.txt无法匹配以空字符开头的txt文件。

3. 通配符的顺序和组合:通配符在表达式中的顺序和组合方式会影响匹配的结果。

例如,使用*.txt*.doc 可以匹配既以.txt结尾又以.doc结尾的文件名,而使用*.txt?*.doc无法匹配这样的文件名。

通配符的顺序和组合方式还会影响匹配的效率。

通常情况下,靠前的通配符会较快地缩小搜索范围,提高匹配效率。

因此,尽量将具体匹配的通配符放在前面,将模糊匹配的通配符放在后面。

4. 转义字符的使用:在某些情况下,我们可能需要在通配符中使用特殊字符。

这时,我们可以使用转义字符(通常是反斜杠\)来取消特殊字符的特殊含义。

例如,使用\?来匹配问号字符本身。

需要注意的是,不同的系统和编程语言对于转义字符的处理方式可能不同,因此在使用转义字符时需要考虑具体的上下文。

1-3-Linux基本命令操作和文件管理-CENTOS7

1-3-Linux基本命令操作和文件管理-CENTOS7

第三章Linux基本命令操作本节所讲内容:3.1 Linux终端介绍Shell提示符Bash Shell基本语法3.2 基本命令的使用:ls、pwd、cd、history3.3 查看系统和BIOS硬件时间3.4 Linux如何获得帮助3.5 开关机命令及7个启动级别3.6 实战:设置服务器来电后自动开机3.7 实战:设置服务器定时开机3.1 Linux终端介绍、Shell提示符、Bash基本语法3.1.1 登录LINUX终端两种终端仿真器:1、GNOME桌面的GHOME Terminal ;2、KDE桌面的Konsole Terminal远程连接终端工具:Xshell , CRT 。

后期会教你安装。

例1:通过tty命令看到当前所属的虚拟终端[root@xuegod63 ~]# tty/dev/pts/0注:shift+ctrl+N快速打开一个终端(退出Ctrl+D)。

终端字体放大:shift+ctrl+加号。

终端字体缩小:ctrl+减号例2:不同虚拟终端之间通讯同时打开两终端,第一个终端执行:[root@xuegod63 ~]# echo xuegod> /dev/pts/1在第二个终端查看:有xuegod输出例3:对所有终端广播消息:系统10分钟后关机。

[root@xuegod63 ~]# shutdown +10 #执行此命令后,在其他终端都会收到关机的消息[root@xuegod63 ~]# shutdown -c #取消关机或:[root@xuegod63 ~]# wall " The system will be shut down in 10 minutes " #广播,所有终端都能收到3.1.2 认识SHELLShell俗称壳,它提供了用户与内核进行交互操作的一种接口,它接收用户输入的命令并把它送入内核去执行Shell实际上是一个命令解释器,它通过解释用户输入的命令并把它传输给系统内核去执行。

Linux_基础教程--Shell脚本编程

Linux_基础教程--Shell脚本编程
17

学习各种管理和监视命令的使用


学习各种文本文件工具的使用

2014年12月24日
变量和表达式
2014年12月24日
18
Shell 变量操作

变量替换扩展


输入

变量测试 变量的字符串操作 变量的间接引用 $[expression] $((expression)) expr let declare -i

Shell 脚本的执行

PATH 环境变量的默认值不包含当前目录, 若脚本文件在当前目录,应使用 ./script-file
PATH 环境变量的默认值包含 ~/bin 目录, 用户可以将自己的脚本文件存放在 ~/bin 目录, 之后即可直接调用脚本文件名执行脚本了

2014年12月24日
7
Shell 脚本的编码规范
${var/%old/new}
用new替换${var}中结尾部分与old匹配的部分
注: (1)old 中可以使用 通配符。 (2)var 可以是 @ 或 *,表示对每个位置参数进行替换
sh –n 脚本名
对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错,如果没有错误,则不显示任何内容。
2014年12月24日
12
脚本调试举例 1

对脚本进行语法检查
$ bash -n greetings.sh

显示脚本中每个原始命令行及其执行结果
$ bash -v greetings.sh
2014年12月24日 22
字符串变量替换扩展举例1
str='I love linux. I love UNIX too.‟

Linux操作系统shell和常用命令

Linux操作系统shell和常用命令内容提要•1 shell•2 进程和shell 命令行•2 常用命令1、使用SHELL•1.1 什么是Shell•1.2 系统中有几种Shell •1.3 Shell脚本1.1 什么是Shell•shell提供了一个到Linux操作系统的界面以方便运行程序。

事实上,shell也只不过是另外一个Linux操作系统程序而已。

•shell是一个命令解释器,它可以用来启动、挂起、停止甚至编写程序。

shell是Linux操作系统的一个整体组成部分,也是Linux操作系统和UNIX设计的一部分。

1.1 什么是Shell•如果把Linux 操作系统的内核想象成一个球体的中心,那么shell 就是包围内核的外层。

从shell 或其他程序向Linux 操作系统传递命令的时候,内核就会做出相应的反应。

•用户Shell 配置的位置/etc//etc/passwdpasswd1.2 shell•这种shell的内建命令都有哪些?•怎样进行任务控制?•这种shell是否支持命令行编辑?•这种shell是否支持命令行历史记录?•什么是它的重要的开机启动文件或者配置文件?•各个shell的重要环境变量有哪些?•可以使用什么样的命令行提示符?•它支持什么样的编程框架?1.2 系统中有几种Shell•ash袖珍的sh兼容的shell–由Kenneth Almquist编写的ash shell是Linux操作系统上尺寸最小的shell之一。

这个shell有24个不同的内建命令和10个不同的命令行参数。

•bash Bourne Again Shell(与ksh和sh兼容)–bash就是由Brian Fox和Chet Ramey编写的Bourne Again Shell,它是Linux操作系统上最流行的shell之一。

•csh对tcsh的一个符号链接•ksh pdksh,公共域Korn(与ksh兼容)shell–pdksh shell在Linux操作系统中叫做ksh。

linux mv正则

linux mv正则Linux mv命令正则表达式详解一、概述在Linux操作系统中,mv命令用于移动或重命名文件或目录。

它是Linux系统中常用的命令之一,可以通过正则表达式来实现更加灵活的文件操作。

本文将详细介绍Linux mv命令中正则表达式的使用方法和常见应用场景。

二、基本语法mv命令基本语法如下:mv [参数] [源文件或目录] [目标文件或目录]参数说明:-f:强制覆盖已存在的目标文件或目录;-i:交互式操作,移动之前询问是否覆盖;-u:只有在目标文件或目录不存在时才执行移动操作;-v:显示移动过程中的详细信息。

三、正则表达式简介正则表达式是一种用于匹配和处理文本的强大工具,它可以根据特定的模式来搜索、替换和提取文本。

在Linux mv命令中,正则表达式可以用于匹配文件名,实现批量移动或重命名操作。

常用的正则表达式元字符:.:匹配任意单个字符;*:匹配前面的字符零次或多次;:匹配前面的字符零次或一次;+:匹配前面的字符一次或多次;[]:匹配方括号中列举的任意一个字符;^:匹配行的开始位置;$:匹配行的结束位置;\:转义字符,用于匹配特殊字符。

四、正则表达式示例1. 使用.匹配单个字符mv file1.txt file2.txt将file1.txt文件重命名为file2.txt。

2. 使用*匹配多个字符mv file*.txt dir/将以file开头,以.txt结尾的所有文件移动到dir目录下。

3. 使用?匹配单个字符mv file?.txt dir/将以file开头,然后是一个任意字符,最后是.txt的所有文件移动到dir目录下。

4. 使用[]匹配指定字符范围将以小写字母开头的所有文件移动到dir目录下。

5. 使用^匹配行的开始位置mv ^file1.txt dir/将除了file1.txt文件外的所有文件移动到dir目录下。

6. 使用$匹配行的结束位置mv file1.txt$ dir/将以file1.txt结尾的所有文件移动到dir目录下。

shell case正则

shell case正则ShellCase是一种Unix系统下的命令行语法,用于指定文件或路径名。

Shell Case可以使用通配符来匹配一组文件或路径名,通配符符号包括星号(*)、问号(?)、中括号([])等。

Shell Case通常用于命令行中的文件路径指定、文件名匹配等场景。

2. Shell Case中的正则表达式正则表达式(Regular Expression),简称为Regex或RegExp,是一种用于匹配文本中模式的表达式。

Shell Case中也支持使用正则表达式来匹配文件或路径名。

常见的正则表达式符号包括:- ^:匹配行首- $:匹配行尾- .:匹配任意单个字符- *:匹配前面的字符0次或多次- +:匹配前面的字符1次或多次- ?:匹配前面的字符0次或1次- []:匹配指定范围内的任意字符- {}:匹配指定次数的字符- ():标记子表达式3. Shell Case正则表达式实例- 匹配所有以.log为后缀名的文件:ls *.log- 匹配所有以数字开头,后缀名为.txt的文件:ls [0-9]*.txt- 匹配所有以字母开头,后缀名为.png或.jpg的文件:ls [a-zA-Z]*.{png,jpg}- 匹配所有以“a”或“A”开头,后面跟2-4个数字,以“.txt”结尾的文件:ls [aA][0-9]{2,4}.txt- 匹配所有以“a”开头,以“b”结尾的文件夹:ls a*b/4. 总结Shell Case正则表达式是Unix系统下命令行语法中的重要部分,通过学习和掌握Shell Case正则表达式可以更方便地进行文件路径指定和文件名匹配等操作。

linux基本shell语法

linux基本shell语法1. 执行命令:输入命令后按下回车键即可执行。

2. 变量赋值:使用等号(=)将值赋给变量,例如:`variable_name=value`3. 输出变量:使用`echo`命令输出变量的值,例如:`echo variable_name`4. 注释:使用井号(#)来添加注释,注释会被解释器忽略。

5. 重定向输入输出:使用重定向符号来将命令的输入输出重定向到文件中,例如:`command > output_file` (将命令的输出重定向到文件)或 `command < input_file` (将文件内容作为命令的输入)6. 管道:使用竖线(|)将前一个命令的输出作为后一个命令的输入,例如:`command1 | command2` (将command1的输出作为command2的输入)7. 执行前一个命令的退出状态码:使用美元符号和问号(?)获取前一个命令的退出状态码(0表示命令成功执行),例如:`echo ?`8. 条件判断:使用`if`语句进行条件判断,例如:```if conditionthencommand1elsecommand2fi```9. 循环:使用`for`和`while`循环进行迭代操作,例如:```for item in listdocommanddone``````while conditiondocommanddone```10. 函数定义和调用:使用`function`关键字定义函数,例如:```function function_name {command1command2return value}``````function_name```以上是一些基本的Linux shell语法,还有更多高级用法可以进一步学习和探索。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档