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

说到shell通配符(wildcard),大家在使用时候会经常用到。

下面是一个实例:view sourceprint?
1
view sourceprint?
1[chengmo@localhost ~/shell]$ ls
2a.txt b.txt c.old
3
4# 2
view sourceprint?
1[chengmo@localhost ~/shell]$ ls*.txt 2a.txt b.txt
3
4# 3
view sourceprint?
1[chengmo@localhost ~/shell]$ ls d*.txt
2ls: 无法访问 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> 或<tab> 或<enter> 三者之一组成(我们常用space )。

CR 由<enter> 产生。

= 设定变量。

$ 作变量或运算替换(请不要与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:
|| & && ; ;; ( ) | <newline>
三、shell转义符
有时候,我们想让通配符,或者元字符变成普通字符,不需要使用它。

那么这里我们就需要用到转义符了。

shell提供转义符有三种。

字符说明
…‟(单引号) 又叫硬转义,其内部所有的shell 元字符、通配符都会被关掉。

注意,硬转义中不允许出现‟(单引号)。

“”(双引号) 又叫软转义,其内部只允许出现特定的shell 元字符:$用于参数代换`用于命令代替
\(反斜杠) 又叫转义,去除其后紧跟的元字符或通配符的特殊意义。

man bash 英文解释如下:
There are three quoting mechanisms: the escape character, single quotes, and double quotes.
实例:
view sourceprint?
01[chengmo@localhost ~/shell]$ ls\*.txt
02ls: 无法访问 *.txt: 没有那个文件或目录
03
04[chengmo@localhost ~/shell]$ ls'*.txt'
05ls: 无法访问 *.txt: 没有那个文件或目录
06
07[chengmo@localhost ~/shell]$ ls'a.txt'
08a.txt
09
10[chengmo@localhost ~/shell]$ ls*.txt
11a.txt b.txt
可以看到,加入了转义符“*”已经失去了通配符意义了。

四、shell解析脚本的过程
看到上面说的这些,想必大家会问到这个问题是,有这么想特殊字符,通配符,那么shell 在得到一条命令,到达是怎么样处理的呢?我们看下下面的图:
如果用双引号包括起来,shell检测跳过了1-4步和9-10步,单引号包括起来,shell检测就会跳过了1-10步。

也就是说,双引号只经过参数扩展、命令代换和算术代换就可以送入执行步骤,而单引号转义符直接会被送入执行步骤。

而且,无论是双引号转义符还是单引号转义符在执行的时候能够告诉各个命令自身内部是一体的,但是其本身在执行时是并不是命令中文本的一部分。

合集下载

Shell脚本编写的高级技巧使用特殊字符和转义序列进行高级文本处理

Shell脚本编写的高级技巧使用特殊字符和转义序列进行高级文本处理

Shell脚本编写的高级技巧使用特殊字符和转义序列进行高级文本处理Shell脚本是一种灵活强大的编程语言,可以用于自动化任务和文本处理。

在Shell脚本编写中,使用特殊字符和转义序列可以增强文本处理的功能,让处理结果更加准确和美观。

本文将介绍一些高级的技巧,包括特殊字符的用法和转义序列的应用。

一、特殊字符的用法在Shell脚本中,特殊字符是具有特殊意义的字符,可以用于对文本进行处理。

1. 通配符通配符是用于匹配文件名的特殊字符。

在Shell脚本中,常用的通配符有以下几种:- "*":匹配0个或多个字符- "?":匹配一个任意字符- "[]":匹配指定范围内的字符例如,使用通配符可以批量重命名文件或者筛选文件。

2. 转义字符转义字符用于对特殊字符进行转义,使其失去原有的特殊意义。

在Shell脚本中,常用的转义字符有以下几种:- "\\":表示转义字符本身- "\n":表示换行- "\t":表示制表符- "\"":表示双引号- "\$":表示美元符号通过使用转义字符,可以处理一些特殊字符或者输出特殊格式的文本。

3. 命令置换命令置换是用于将命令的输出结果嵌入到另一个命令中的技巧。

在Shell脚本中,常用的命令置换符号有以下几种:- "$()":将命令的输出结果嵌入到$()中间- "``":将命令的输出结果嵌入到``中间通过使用命令置换,可以将命令的输出结果作为变量的值进行处理。

二、转义序列的应用转义序列是一种特殊的字符序列,可以用于控制终端的显示效果或者输出一些特殊的字符。

在Shell脚本中,常用的转义序列有以下几种:1. 控制终端的显示效果通过使用转义序列,可以改变终端的字体颜色、背景颜色以及其他一些显示效果。

shell通配符、特殊符号与转义符

shell通配符、特殊符号与转义符

shell通配符、特殊符号与转义符通配符(wildcard)是由shell处理的(不是由所涉及到命令语句处理的),它只会出现在命令的"参数"⾥(它不⽤在命令名称,也不⽤在操作符上)通配符含义*匹配零个或多个字符匹配任意单个字符[c1-c2]匹配c1到c2(如[0-9],[a-z])中的任意单⼀字符[list]匹配list中的任意单⼀字符[^list]匹配⾮list中的任意单⼀字符{string1,string2,…}匹配string1或string2…其中⼀个字符串(注意是花括号)查看硬盘⽂件的相关权限属性找出/etc/⽬录下以cron为开头的⽂件名找出/etc/⽬录下⽂件名刚好是五个字符的⽂件名找出/etc/⽬录下⽂件名开头⾮a到x字母的⽂件名其他特殊符号Meta(shell元字符)字符说明IFS(内部域分割符)由 <space> 或 <tab> 或 <enter> 三者之⼀组成(我们常⽤ space )。

CR由 <enter> 产⽣。

#批注符号,这个最长被使⽤在script脚本当中,视为说明,其后的数据均不执⾏。

~⽤户的主⽂件夹=设定变量。

$作变量(变量前导符,即变量之前需要加的变量替代值)或运算替换>,>>重定向 stdout,分别是"替换"与"追加"。

*>,>>重定向 stdout,分别是"替换"与"追加"。

*<,<<重定向 stdin,分别是"替换"与"追加"。

*|管道(pipe),分隔两个管道命令的界定。

*&重导向 file descriptor ,或将命令置于背景下执⾏(作业控制 job control)。

*( )在中间为⼦shell的执⾏与结束(将其内的命令置于nested subshell执⾏),或⽤于运算或命令替换。

shell中符号的用法

shell中符号的用法

shell中符号的用法Shell中符号的用法在Shell编程中,符号是非常重要的元素。

它们可以用于控制程序的流程、组织数据和执行各种操作。

本文将详细讲解一些常见的Shell符号用法,并且给出示例以帮助读者更好地理解。

1. 管道符 |管道符用于连接两个命令,将前一个命令的输出作为后一个命令的输入。

它可以用于串联命令,实现复杂的数据处理。

示例:ls -l | grep ".txt"上述命令会列出当前目录下的所有文件,并且通过管道传递给grep命令进行筛选,只显示包含”.txt”的文件。

2. 重定向符 >重定向符用于将命令的标准输出重定向到文件中,覆盖文件原有内容。

如果文件不存在,则会创建新文件。

示例:echo "Hello, world!" >上述命令会将字符串”Hello, world!“写入到文件中,如果文件已存在,则会覆盖原有内容。

3. 重定向符 >>重定向符” >> “用于将命令的标准输出重定向到文件中,并且以追加的方式写入文件。

如果文件不存在,则会创建新文件。

示例:echo "Hello, world!" >>上述命令会将字符串”Hello, world!“以追加的方式写入到文件中,如果文件已存在,则会将内容追加到文件末尾。

4. 反引号 `反引号用于执行命令,并将命令的输出作为变量或命令的一部分。

示例1-将命令的输出赋值给变量:files=`ls`echo $files上述命令通过”ls”命令获取当前目录下的文件列表,并将列表赋值给变量files,然后通过echo命令输出变量的值。

示例2-命令替换:echo "Today is `date`"上述命令中,反引号内的”date”命令会被执行,并将结果替换到整个字符串中,从而得到类似于”Today is 2022年11月14日星期一”的结果。

linux shell 字符串转义方法

linux shell 字符串转义方法

linux shell 字符串转义方法Linux Shell 字符串转义方法在Linux Shell 编程中,字符串是一种常见的数据类型,但有时候字符串中可能包含特殊字符,如引号、反斜杠等,这些特殊字符可能会导致程序出现错误或执行不符合预期。

为了解决这个问题,我们可以使用字符串转义来处理特殊字符,使其被正确地解释和显示。

本文将介绍一些常见的Linux Shell 字符串转义方法。

1. 反斜杠转义在Linux Shell中,反斜杠(\)被用作转义字符,可以将其后的字符视为普通字符,而不是特殊字符。

例如,如果想要在字符串中插入一个引号,可以使用反斜杠进行转义,如下所示:```echo "She said, \"Hello!\"" # 输出结果为:She said, "Hello!"```在上面的例子中,使用反斜杠转义了引号,使其被正确显示在输出结果中。

2. 单引号转义在单引号(')中的所有字符都会被视为普通字符,不会进行任何转义。

这意味着,在单引号内部的特殊字符将被完全忽略。

例如:```echo 'She said, "Hello!"' # 输出结果为:She said, "Hello!" ```在上面的例子中,单引号将整个字符串都视为普通字符,因此双引号不会被转义。

3. 双引号转义在双引号(")中的一些特殊字符,如$、\、`等,会保留其特殊含义,而其他字符都会被视为普通字符。

例如:```echo "Today is $(date)" # 输出结果为:Today is 当前日期```在上面的例子中,使用双引号将$(date)作为一个命令替换,将当前日期插入到字符串中。

4. $'...' 转义使用$'...'结构,可以对一些特殊字符进行转义,如换行符(\n)、制表符(\t)等。

Shell脚本编写的高级技巧使用通配符进行文件匹配

Shell脚本编写的高级技巧使用通配符进行文件匹配

Shell脚本编写的高级技巧使用通配符进行文件匹配Shell脚本编写的高级技巧:使用通配符进行文件匹配Shell脚本是一种用于自动化任务和批处理的脚本语言,广泛应用于Unix、Linux系统以及类似环境中。

在编写Shell脚本时,文件匹配是一个常见的需求。

使用通配符可以让我们更加灵活和高效地进行文件匹配和操作。

本文将介绍Shell脚本中使用通配符进行文件匹配的高级技巧。

一、通配符简介通配符是Shell中用于进行模式匹配的特殊字符。

最常用的通配符包括星号(*)和问号(?),以及方括号([])中的字符集。

下面逐一介绍各种通配符的用法。

1. 星号(*)星号可以匹配任意长度的任意字符。

比如,"*"可以匹配任意字符(包括空字符),"*.txt"可以匹配以".txt"结尾的文件名,"file*"可以匹配以"file"开头的文件名。

2. 问号(?)问号可以匹配任意单个字符。

比如,"file?.txt"可以匹配"file1.txt"、"file2.txt"等文件名。

3. 方括号([])方括号可用于指定字符集合,匹配其中任意一个字符。

比如,"[abc]"可以匹配字符"a"、"b"或者"c","[0-9]"可以匹配任意数字。

二、高级技巧:使用通配符进行文件匹配在实际的Shell脚本编写过程中,我们通常需要使用通配符进行文件匹配,以便执行某些操作,比如复制、移动、删除等。

以下是一些高级技巧,利用通配符实现更加复杂的文件匹配操作。

1. 递归匹配通常我们需要在目录结构中进行文件匹配,这时可以使用递归匹配。

例如,使用"**"通配符可以匹配任意深度的子目录。

34Linuxshell编程-元字符(正则表达式)及其用法详解

34Linuxshell编程-元字符(正则表达式)及其用法详解

34Linuxshell编程-元字符(正则表达式)及其⽤法详解在正则表达式中,我们把⽤于匹配的特殊符号⼜称作元字符。

在中,元字符⼜分为基础元字符和扩展元字符。

基础元字符我们先来看看到底有哪些基础元字符,如表 1 所⽰。

表 1 基础元字符元字作⽤符*前⼀个字符匹配 0 次或任意多次.匹配除换⾏符外的任意⼀个字符^匹配⾏⾸。

例如,^hello 会匹配以 hello 开头的⾏$匹配⾏尾。

例如,hello& 会匹配以 hello 结尾的⾏[]匹配⼬柄号⼬指定的任意⼀个字符,⽽且只匹配⼀个字符。

例如.[aoeiu]匹配任意⼀个元⾳字母, [0-9] 匹配任意⼀位数字,[a-z][0-9]匹配由⼩写字母和⼀位数字构成的两位字符[^]匹配除中括号中的字符以外的任意⼀个字符。

例如,[^0-9] 匹配任意⼀位⾮数字字符,[^a-z] 匹配任意⼀位⾮⼩写字母\转义符,⽤于取消特殊符号的含义\{n\}表⽰其前⾯的字符恰好出现 n 次。

例如,[0-9]\{4\} 匹配4位数字,[1][3-8][0-9]\{9\} 匹配⼿机号码\(n,\}表⽰其前⾯的字符出现不少于 n 次。

例如,[0-9]\{2,\} 匹配两位及以上的数字\{n,m\}表⽰其前⾯的字符⾄少出现 n 次,最多出现 m 次。

例如,[a-z]\{6,8\} 匹配 6〜8 位的⼩写字母下⾯举例来说明这些基础元字符的作⽤。

我们已经学习过的 grep 命令⽀持正则表达式,所以下⾯的练习都需要利⽤ grep 命令来演⽰。

在使⽤ grep 命令开始练习之前,建议⼤家在 ~/.bashrc ⽂件中建⽴这个别名,如下:[root@localhost ~】# vi /root/.bashrcalias grep='grep --color=auto'这样,grep 命令所匹配的字符都会使⽤颜⾊提⽰,更加容易理解正则表达式所具体匹配的字符串。

练习⽂件建⽴既然正则表达式是⽤来在⽂件中匹配字符串的,那么我们必须建⽴⼀个测试⽤的⽂件,才可以进⾏后续的实验。

linux shell 使用技巧

linux shell 使用技巧Linux Shell是Linux操作系统下的命令行界面,通过Shell可以实现对系统的管理和操作。

掌握一些Linux Shell的使用技巧可以提高工作效率和操作的便捷性。

下面介绍几个常用的Linux Shell使用技巧:1. 命令历史记录:在Shell中可以通过使用方向键(向上、向下)来查看之前执行的命令,还可以使用"history"命令查看历史命令记录。

可以使用"!n"来执行第n 条历史命令,也可以使用"!!"执行上一条命令。

2. Tab补全:在Shell中输入命令或路径时,可以使用Tab键进行自动补全,减少输入错误和提高效率。

比如输入前几个字符,然后按Tab键就可以自动补全。

3. 利用通配符:通配符可以匹配文件名或路径名,常用的通配符包括"*"(匹配任意字符)、"?"(匹配单个字符)、"[]"(匹配字符集合)。

可以通过通配符来批量处理文件或目录。

4. 利用管道符"|":管道符可以将一个命令的输出作为另一个命令的输入,实现命令之间的数据传递和处理。

可以将多个命令组合起来,实现更复杂的操作。

5. 后台执行命令:在Shell中可以使用"&"符号将命令放入后台执行,可以同时执行其他命令,提高效率。

可以使用"jobs"命令查看后台任务。

6. 别名命令:可以使用"alias"命令给命令设置别名,可以简化命令的输入和记忆。

可以将常用的命令设置成别名,方便使用。

7. Shell脚本:可以编写Shell脚本来批量执行命令或实现自动化操作。

Shell脚本可以包括各种Shell命令、控制结构和函数,可以提高工作效率。

8. 使用grep命令:grep命令可以在文件中查找指定的内容,可以使用正则表达式进行模糊匹配。

Shell命令行中特殊字符与其转义详解(去除特殊含义)

Shell命令⾏中特殊字符与其转义详解(去除特殊含义)特殊符号及其转义⼤家都知道在⼀个shell命令是由命令名和它的参数组成的, ⽐如 cat testfile, 其中cat是命令名, testfile是参数. shell将参数testfile传递给cat命令. 但是, 如果参数中含有特殊字符, ⽐如说*, *我们知道,是表⽰任意多个(包括0个)任意字符. 那么shell的⼯作⽅式是,它会对这些特殊字符进⾏预先处理, 然后再将处理的结果传给那个命令.⽐如说,如果你的当前⽬录有file, file1, file2 三个⽂件, 那么当你执⾏cat file*的时候, shell会对参数部分file*进⾏预先处理, 由于*表⽰任意多个(包括0个)任意字符,那么处理的结果便是file file1 file2,接下来,shell再将这个结果, 即file file1 file2传递给cat命令, 所以你看到的结果跟直接执⾏cat file file1 file2是⼀样的, 那就是三个⽂件的内容都显⽰在命令⾏终端.实际上,我们有办法看到shell处理的结果是什么,或者说真正执⾏的命令是什么样⼦的, 那就是在你要执⾏的命令之前加上echo.⽐如说,在上⾯的⽬录下,你执⾏echo cat file* , 那么你将看到1cat file file1, file2上⾯那条命令,就是经过shell对参数的处理之后,真正执⾏的命令.但是很多时候,我们希望传递给这些命令的,就是这些参数本⾝, ⽐如说,你当前⽬录下有⼀个⽂件的⽂件名就叫test*, 同时还有另外⼀个⽂件, test1. ⽽你只想看test*的内容, 这时候,如果你执⾏1cat test*的话,那么test*和test1的内容都会被显⽰出来,这时候怎么办呢? 这⾥就涉及到特殊字符的转义(escape)的问题了.所谓的转义,意思就是去掉它的特殊含义.让shell把他们当做⼀般字符对待,不要进⾏特殊处理.在shell中,特殊字符的转义有三种办法1. ⽤\转义: 把\字符放在特殊字符的前⾯2. ⽤单引号('')转义: ⽤单引号把参数括起来3. ⽤双引号("")转义: ⽤双引号把参数括起来在上⾯的例⼦中,这三种⽅法都是有效率的,也就是说,下⾯的三个命令都能达到⽬的:1. cat test\*2. cat 'test*'3. cat “test*”三种转义⽅法的范围在shell中,特殊字符是⾮常多的,⽽以上提到的三种转义⽅法的范围也不尽相同,其中第⼀种⽅法的范围是最⼴的,⼏乎可以对所有的特殊字符进⾏转义,常见的⽤法是把\放在⼀个命令⾏的最后,这样⼀个很长的命令就可以分为两⾏或者更多⾏写. ⽐如1 2 3echo this is a \ very long \ line将显⽰成1this is a very long line在这⾥,其实就是\把换⾏符转义了,让它失去了换⾏的意思,同时阻⽌命令⽴刻执⾏.第⼆种转义(单引号)的范围⽐第⼀种⼩,它可以阻⽌命令⾏⽴刻执⾏,但是它不能让换⾏符失去换⾏的意思. 所以1 2echo'hello world'将显⽰成1 2hello world第三种转义(双引号)的范围⼜⽐第⼆种⼩,单引号可以转义"`", ⽽双引号不⾏. 在shell中, "`"中间的东西将被视为命令替换. shell对参数进⾏预先处理时,将把两个"`"中间的东西当做shell命令进⾏执⾏,再将执⾏结果替换掉他们本⾝. 举个例⼦:1echo today is `date`将显⽰1today is Mon Oct 12 16:14:16 CST 2015当然,具体的⽇期跟你执⾏这条命令的时期有关. 总之,意思你应该明⽩了. 再回到原来的问题,我们说单引号可以转义"`", ⽽双引号不⾏, 意思就是,单引号之间的"`"将失去它的特殊含义,⽽双引号之间的"`"将依然有特殊含义,所以1echo'today is `date`'将显⽰1today is `date`⽽1echo“today is `date`”将显⽰1today is Mon Oct 12 16:23:23 CST 2015常见的⼀些特殊字符1. * 任意个任意字符2. ? ⼀个任意字符3. [..] []中的任意⼀个字符,这⾥也类似于正则表达式,中括号内可以是具体的⼀些字符,如[abcd]也可以是⽤-指定的⼀个范围,如[a-d]4. # 注释5. (空格) 参数分隔符6. cmd 命令替换7. | 管道8. & 后台执⾏9. ; 命令分隔符(可以在同⼀⾏执⾏两个命令,⽤;分割)10. ~ ⽤户home⽬录最后记得,任何时候,你不确定⾃⼰是不是转义对了,或者是特殊字符⽤对了,记得可以在命令前⾯加上echo,来看看真实执⾏的命令是怎么样的。

linuxshell命令之转义字符

linuxshell命令之转义字符转义& 传递到脚本的参数数量* 0个或才多个在字符之前的那个普通字符+ 匹配⼀个或者多个在其之前的那个普通字符^ 匹配⾏⾸,或者后⾯字符的⾮$ 命令的退出状态,0表⽰没有错误,⾮0表⽰有错误` 反引号, shell的引⽤符号" 双引号, shell的引⽤符号| 管道符号或者表⽰"或"的意义?匹配0个或者1个在其之前的那个普通字符\ 转义符echo "This is \" The 60th National Day\""This is " The 60th National Day"cat weirdvars.sh#!/bin/bashvariable="()\\{}\$\""echo $variableecho "$variable"IFS='\' #将分隔符改为转义符echo $variableecho "$variable"exit 0./weirdvars.sh()\{}$"()\{}$"() {}$"()\{}$"第三个,将shell域的分隔符改为转义符,echo $variable得到的结果变化:(){}$, \符号变成空格,这是因为shell分隔符将$variable解析为两个域:()和{}$,中间⽤空格分隔。

第四个,由于双引号具⽤防⽌变量分隔的作⽤,因此输出结果仍为()\{}$"cat escape.sh#!/bin/bash#echo 不加e选项,按照字⾯含义解释\t等特殊符号echo "\t\n\a\v"#echo 加上e选项后,按照转义进⾏解析echo -e "\t\t\thello"echo -e "hello\v\v\fhello" #换⾏,但光标仍停在原来的位置echo -e "\a\a\a\a" #发出警报声echo -e "\042" #ASCII码执⾏: ./escape.sh\t\n\a\vhellohellohello"如果使⽤了$符号,就⽆须再使⽤-e选项daheng@ubuntu:~/test_program$ echo $'\t\thello'hellodaheng@ubuntu:~/test_program$ echo $'hello\b\101'hellAecho的选项有两个:-e和-n-e选项表⽰将转义符后的字符解析为特殊字符-n选项表⽰转义符后输出⽂字不换⾏。

shell脚本之sed使用----替换、变量、转义字符

shell脚本之sed使⽤----替换、变量、转义字符sed替换的基本语法为:----s后⾯跟的是分隔符,原字符串可使⽤.*这种正则表达式进⾏整⾏替换sed's/原字符串/替换字符串/'单引号⾥⾯,s表⽰替换,三根斜线中间是替换的样式,特殊字符需要使⽤反斜线”\”进⾏转义,但是单引号”‘”是没有办法⽤反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就⾏了,例如:sed"s/原字符串包含'/替换字符串包含'/"//要处理的字符包含单引号命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为⽅便,只需要紧跟s定义即可,例如换成问号”?”:sed's?原字符串?替换字符串?'//⾃定义分隔符为问号可以在末尾加g替换每⼀个匹配的关键字,否则只替换每⾏的第⼀个,例如:sed's/原字符串/替换字符串/'//替换所有匹配关键字上箭头”^”表⽰⾏⾸,美元”$”符号如果在引号中表⽰⾏尾,但是在引号外却表⽰末⾏(最后⼀⾏),这⾥犯⼆了,搜了半天哪个符号表⽰⾸⾏,半天才想起来,⾸⾏就是数字”1″啊.那么在⾏⾸和⾏尾添加字符串就是把⾏尾和⾏⾸替换,例如:sed's/^/添加的头部&/g'//在所有⾏⾸添加sed's/$/&添加的尾部/g'//在所有⾏末添加sed'2s/原字符串/替换字符串/g'//替换第2⾏sed'$s/原字符串/替换字符串/g'//替换最后⼀⾏sed'2,5s/原字符串/替换字符串/g'//替换2到5⾏sed'2,$s/原字符串/替换字符串/g'//替换2到最后⼀⾏替换样式可以多个在同⼀条命令中执⾏,⽤分号”;”分隔,例如:sed's/^/添加的头部&/g;s/$/&添加的尾部/g'//同时执⾏两个替换规则sed处理过的输出是直接输出到屏幕上的,要保存可以将输出重定向,或者使⽤参数”i”直接在⽂件中替换:sed -i 's/原字符串/替换字符串/g' filename //替换⽂件中的所有匹配项++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++⾸先是Sed⾥使⽤变量的问题⽹上有⼈总结了四种⽅案:1. eval sed's/$a/$b/' filename2. sed"s/$a/$b/" filename3. .sed's/'$a'/'$b'/' filename4. .sed s/$a/$b/ filename我⽐较喜欢第⼆种,也就是:Sed后⾯的表达式⼀般⽤单引号引起来('),当需要使⽤变量时就换⽤双引号(")。

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