一.Sed 知识预热;
sed的处理流程,简化后是这样的:
1.读入新的一行内容到缓存空间;
2.从指定的操作指令中取出第一条指令,判断是否匹配pattern;
3.如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;
4.如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;
5.当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
6.当所有行都处理完之后,结束;
正则表达式介绍;
^锚定行的开始如:/^sed/匹配所有以sed开头的行。
$锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
.匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
*匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
[^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\)保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
&;保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\<;锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。
\>;锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\}重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
x\{m,\}重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
x\{m,n\}重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。
Sed 常用选项介绍;
sed命令行格式为:
sed [-nefri] ‘command’ 输入文本/文件
常用选项;
-n∶取消默认的输出,使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
-e∶进行多项编辑,即对输入行应用多条sed命令时使用. 直接在指令列模式上进行 sed 的动作编辑
-f∶指定sed脚本的文件名. 直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作
-r∶sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
-i∶直接修改读取的文件内容,而不是由屏幕输出
常用命令 ;
a ∶ 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c ∶ 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d ∶ 删除,因为是删除,所以 d 后面通常不接任何内容
i ∶ 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p∶ 列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起用
s∶ 取代,可以直接进行替换的工作。通常这个 s 的动作可以搭配正则表达式。例如 1,20s/old/new/g
二.实例分享;
1.清除该文件内所有空白行;(文件内容如下所示;)
[root@xin test]# sed -i '/^$/d' test1.txt #清除文件内所有空行;
2.替换文件内所有阿拉伯数字为test;
[root@xin test]# sed -i 's/[0-9]/test/g' test1.txt #替换文件内所有阿拉伯数字为test;
3.将文件内所有小写字母替换成123;
[root@xin test]# sed -i 's/[a-z]/123/g' test1.txt #所有小写字母替换成123;