一正则表达式
BasicREGEXP:基本正则表达式
ExtendedREGEXP:扩展正则表达式
(正则表达式是使得计算机变成智能化的重要途径)
1.1基本正则表达式
.:表示匹配任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
字符匹配
*:匹配其前面的字符任意次
\?:其前的字符是可有可无的
\{m,n\}:匹配其前的字符至少m次,至多n次
\{0,n\}:匹配其前的字符少为0次,至多n次
\{m,\}:匹配其前的字符至少m次,没有上限
.*:匹配其前面的任意长度的任意字符
位置锚定锚定:
^:锚定行首
$:锚定行尾
\<,\b:锚定词首
\>,\b:锚定词尾
\(\):锚定分组
\1,\2,\3,...:后向引用
grep:使用基本正则表达式定义的模式来过滤文本的命令;
-E:使用扩展的正则表达式
-i:忽略字符大小写
-v:匹配到的字符串不显示
-o:只显示匹配到的字符串
--color:显示匹配到的颜色
-A#:显示匹配到的行及其后的行eg:grep--color-A2'^coreid'/proc/cpuinfo显示coreid行及其后面的两行
-B#:显示匹配到的行及其前的行eg:grep--color-A2'^coreid'/proc/cpuinfo显示coreid行及其前面的两行
-C#:显示匹配到的行及其前后的行eg:grep--color-C2'^coreid'/proc/cpuinfo上下都两行,表示上下文
1.2扩展正则表达式
字符匹配:
.:表示匹任意单个字符
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
次数匹配:
*:匹配其前面的字符任意次
?:匹配其前的字符是可有可无的
+:匹配其前面的字符至少一次
{m,n}:匹配其前的字符至少m次,至多n次
位置锚定:
^:锚定行首
$:锚定行尾
\<,\b:锚定词首
\>,\b:锚定词尾
分组:(扩展正则表达式中才真正实现分组的意义)
():分组
\1,...
扩展正则表达式还支持一个特殊的字符:或者
|:or
C|cat:表示C或categ:grep--color-E'C|cat'test1.txt
(C|c)at:表示Cat或categ:grep--color-E'(C|c)at'test1.txt
eg:grep--color-E'^[[:space:]]+'/boot/grub/grub.conf引用至少一次空白字符开头的行
grep-E=egrep(二者表达的意义相同)
1.3实例分析
找出/boot/grub/brug.conf文件中的1-255之间的数字
eg:egrep--color'\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'/boot/grub/brug.conf
eg:ifconfig|egrep--color'(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
eg:ifconfig|egrep'\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
找出ifconfig命令中1-255之间的数字执行结果的IP地址
eg:ifconfig|egrep--color'(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'
eg:ifconfig|egrep-o'(\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>\.){3}\<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>'只显示匹配到的串本身
精确找出ifconfig命令中1-255之间的数字执行结果中的IP地址
eg:egrep--color'\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[01][0-9]|22[0-3]\>(\.<([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>){2}\.\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5)\>'
IPv4:(A,B,C,D,E)
A:1-127
B:128-191
C:192-223
二sed的基本用法
2.1sed:StreamEDitor行编辑器,只适合编辑纯ASSIC码的文本,实现逐行处理文本(全屏编辑器:vi)
sed:模式空间(内存空间)
默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;
sed[options]’AddressCommand'file...对这个或这些文件当中的符合这个地址指定范围内行执行以上编辑命令
-eSCRIPT-eSCRIPT:可以同时指定多个脚本
-f/PATH/TO/SED_SCRIPT
sed-f/path/to/scriptsfile
-r:表示使用扩展正则表达式
eg:history|sed's#[[:space:]]##g'查找空白字符替换成什么也没有,删除空白字符
eg:histpry|sed'S#[[:space:]]##g'查找空白字符,把空白字符替换成什么也没有
eg:history|sed's#^[[:space:]]##g'查找行首的空白字符,把行首的空白字符替换成什么也没有
eg:history|sed's#^[[:space:]]*##g'|cut-d''f1查找行首的空白字符,把行首的空白字符替换成什么也没有
2.2Address(地址指令方法)
1、StartLine,EndLine(从起始行到结束行用“,"隔开)
比如1,1001到100行
$:倒数第一行
$-1:倒数第二行
2、/RegExp/使用正则表达式指定模式
eg:/^root/以root字符串开头的行
3、/pattern1/,/pattern2/
第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
4、LineNumber
指定的行(精确到某行)
5、StartLine,+N
从StartLine(指定的行)开始,向后的N行
2.3Command
d:删除符合条件的行
eg:sed‘1d'/etc/fstab只删除第1行
eg:sed‘1,2d'/etc/fstab删除第1,2行
eg:sed‘1,$-1d'/etc/fstab删除第1行到倒数第2行
eg:sed‘1,+2d'/etc/fstab删除3行
p:显示符合条件的
a\string:在指定的行后面追加新行,内容为string
eg:sed'/^\//a\#helloword'/etc/fstab
\n:可用于换行
eg:sed'/^\//a\#helloword\n#hello,linux'/etc/fstab
wFILE:将地址指定的范围内的行另存至指定的文件中
eg:sed'/oot/w/tmp/oot.txt'/etc/fstab把oot保存至tmp文件下
s/pattern/string/修饰符:查找并替换,默认只替换每行中第一次被模式匹配到的字符串
eg:sed’s/oot/OOT'/etc/fstab把指定文件中的oot换成OOT
如果想每一行当中所有出现过的都替换要加修饰符;
加修饰符
g:全局替换
i:忽略字符大小写
s///:s###,s@@@
\(\),\1,\2
&:引用模式匹配到的整个串
eg:sed's@/@#@g'/etc/fstab
eg:nanosed.txt
hello,like
hi,mylove.
sed's#l..e#&r#g'sed.txt把以l开头e结尾的字符串后面加上r或写为sed's#\(l..e\)#\lr#g'sed.txt
sed's#l\(..e)#L\l#g'sed.txt把l..e中的l换成L