详解shell脚本(八)——正则表达式和文本替换
2018-02-23 23:24
639 查看
正则表达式
[0-9]或[:digit:]匹配数字0~9。{1,3}匹配1到3个数字,.匹配”.”。
表 4-1:
正则表达式 描述 示例
- 行起始标记 -tux匹配以tux起始的行
行尾标记tux行尾标记tux 匹配以tux结尾的行
. 匹配任意一个字符 hack.匹配hackl和hacki,但是不能匹配hackl2和hackil 它只能匹配单个字符
[] 匹配包含在[字符]之中的任意一个字符 coo[kl]匹配cook或cool
[^] 匹配除字符之外的任意一个字符 901匹配92,93,但是不能匹配colouur
[-] 匹配[]中指定外围内的任意一个字符 [1-5]匹配1~5的任意一个数字
? 匹配之前的项1次或0次 colou?r匹配color或colour,但是不能匹配colouur
+ 匹配之前的项1次或多次 Rollno-9+匹配Rollno-99.Rollno-9,但是不能匹配Rollno-
* 匹配之前的项0次或多次 co*l 匹配cl,col,coool等
() 创建一个用于匹配的子串 ma(tri)?x匹配max或maxtrix
{n} 匹配之前的项n次 [0-9]{3} 匹配任意一个三位数,[0-9]{3}可以扩展为0-9[0-9]
{n,} 之前的项至少需要匹配n 次 [0-9]{2,}匹配任意一个两位数或更多位的数字
{n,m} 指定之前的项所必需匹配的最小次数和最大次数 [0-9]{2,5}匹配两位数到五位数之间的任意一个字数
| 交替—匹配|两边的任意一项 Oct {1st | 2nd} 匹配Oct 1st或Oct 2nd
\ 转义符可以将上面介绍的特殊字符进行转义 a \ .b 匹配a.b,但不能匹配ajb。通过在.之前加上前缀\,从而忽略了.的特殊意义
grep命令只解释match_text中的某些特殊字符。如果要使用正则表达式,需要添加-E选项——这意味着使用扩展(extended)正则表达式。或者也可以使用默认允许正则表达式的grep命令——egrep
和-l相反的选项是-L,它会返回一个不匹配的文件列表。
这是开发人员使用最多的命令之一。它用于查找某些文本位于哪些源码文件中。
cut 按列切分文件
使用sed进行文本替换
([a-z]+)匹配第一个单词,([A-Z]+)匹配第二个单词。\1和\2用来引用它们。这种引用被称为向后引用(back reference)。在替换部分,它们的次序被更改为\2 \1,因此结果就呈现出逆序的形式。
#IP地址 [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
[0-9]或[:digit:]匹配数字0~9。{1,3}匹配1到3个数字,.匹配”.”。
表 4-1:
正则表达式 描述 示例
- 行起始标记 -tux匹配以tux起始的行
行尾标记tux行尾标记tux 匹配以tux结尾的行
. 匹配任意一个字符 hack.匹配hackl和hacki,但是不能匹配hackl2和hackil 它只能匹配单个字符
[] 匹配包含在[字符]之中的任意一个字符 coo[kl]匹配cook或cool
[^] 匹配除字符之外的任意一个字符 901匹配92,93,但是不能匹配colouur
[-] 匹配[]中指定外围内的任意一个字符 [1-5]匹配1~5的任意一个数字
? 匹配之前的项1次或0次 colou?r匹配color或colour,但是不能匹配colouur
+ 匹配之前的项1次或多次 Rollno-9+匹配Rollno-99.Rollno-9,但是不能匹配Rollno-
* 匹配之前的项0次或多次 co*l 匹配cl,col,coool等
() 创建一个用于匹配的子串 ma(tri)?x匹配max或maxtrix
{n} 匹配之前的项n次 [0-9]{3} 匹配任意一个三位数,[0-9]{3}可以扩展为0-9[0-9]
{n,} 之前的项至少需要匹配n 次 [0-9]{2,}匹配任意一个两位数或更多位的数字
{n,m} 指定之前的项所必需匹配的最小次数和最大次数 [0-9]{2,5}匹配两位数到五位数之间的任意一个字数
| 交替—匹配|两边的任意一项 Oct {1st | 2nd} 匹配Oct 1st或Oct 2nd
\ 转义符可以将上面介绍的特殊字符进行转义 a \ .b 匹配a.b,但不能匹配ajb。通过在.之前加上前缀\,从而忽略了.的特殊意义
grep命令只解释match_text中的某些特殊字符。如果要使用正则表达式,需要添加-E选项——这意味着使用扩展(extended)正则表达式。或者也可以使用默认允许正则表达式的grep命令——egrep
grep -l linux sample1.txt sample2.txt
和-l相反的选项是-L,它会返回一个不匹配的文件列表。
grep "test_function()" . -R -n
这是开发人员使用最多的命令之一。它用于查找某些文本位于哪些源码文件中。
cut 按列切分文件
cat student_data.txt NO Name Mark Percent 1 Sarath 45 90 2 Alex 49 98 3 Anu 45 90 cut -f3 --complement student_data.txt
使用sed进行文本替换
sed 's/pattern/replace_string/' file #打印的同时替换结果应用于原文件 sed -i 's/text/replace/' file sed -i 's/pattern/replace_string/g' file #后缀/g意味着sed会替换每一处匹配。但是有时候我们只需要从第n处匹配开始替换。对此,可以使用/Ng选项 #已匹配字符串标记(&) echo this is an example | sed 's/\w\+/[&]/g' #正则表达式\w\+匹配每一个单词,然后我们用[&]替换它。 echo seven EIGHT | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
([a-z]+)匹配第一个单词,([A-Z]+)匹配第二个单词。\1和\2用来引用它们。这种引用被称为向后引用(back reference)。在替换部分,它们的次序被更改为\2 \1,因此结果就呈现出逆序的形式。
相关文章推荐
- 详解Linux--shell脚本之正则表达式
- shell脚本之正则表达式、函数、grep、sed、awk、printf等基本命令配置详解
- #7 shell脚本编程之正则表达式
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
- 【shell脚本】匹配函数的正则表达式
- shell脚本及正则表达式
- Linux命令行与shell脚本(17)--正则表达式
- Shell脚本中通过正则表达式匹配IP地址
- shell脚本:正则表达式-初
- shell脚本学习:快速理解正则表达式之grep篇
- Shell脚本中通过正则表达式匹配IP地址
- Shell脚本高级编程 二 正则表达式
- 让shell脚本中的正则表达式调用变量
- shell脚本学习笔记之正则表达式
- linux命令行与shell脚本大全_第十九章_正则表达式
- shell脚本系列-正则表达式介绍
- shell 脚本 正则表达式通配符之 "[]" [大三TJB_708]
- Shell脚本的编写,sed的使用以及一些正则表达式
- Linux--shell脚本之正则表达式
- shell脚本学习:正则表达式之sed,tr篇