(1)sed命令的基本用法
(1)sed [options] {sed-commands} {input-file}
sed -n 'p' test.txt
(2)执行多个命令使用-e参数
sed [ options ] –e {sed-command-1} –e {sed-command-2} {input-file}
(3)sed脚本执行流程
执行脚本需要使用-f 参数
从指定文本进行 读取 执行 打印 重复
sed脚本是将命令写入到一个文件当中,执行命令时调用
读取一行内容到模式空间当中,模式空间是sed一个临时缓存,用于存放读取到的内容,然后在模式空间执行对应的命令,有多个命令那就依次执行。然后打印模式空间的内容到终端,然后清空模式空间,然后重复操作,直至没有行内容可以读取了。
(4)打印模式模式空间的内容使用p,通常搭配-n参数
因为p只打印模式空间里的内容,sed会默认输出匹配到的内容,若是不使用-n参数来屏蔽sed的默认输出,则终端会输出两次内容。
(5)修改匹配范围
可以使用逗号、加号、和波浪号来修改地址范围。
sed -n '1,3 p' test.txt 打印test.txt文件的1到3行的内容
sed -n '1~3 p' test.txt 从打印test.txt文件的第一行开始,每隔3行打印一次
sed -n '1+3 p' test.txt 打印test.txt文件的第一行开始后面的三行内容
加号+配合逗号使用,可以指定相的若干行,而不是绝对的几行。
如 n,+m 表示从第 n 行开 始后的 m 行
同时,匹配范围也可以匹配指定的字符串作为范围的开头和结尾。
(6)删除行使用参数d
打印指定文件的内容并删除对应的行内容到终端。
(7)把模式空间的内容保存输出到指定的文件当中
sed '2 w test1.txt' test.txt
将test.txt 文件的第二行内容保存到test1.txt文件。并且在屏幕上显示内容,若想不想显示内容,则添加-n参数。
(8)sed的替换命令s
sed ‘[address-range|pattern-range] s/original-string/replacement-string/[substitute-flags]’ input file
address-range 或 pattern-range(即地址范围和模式范围)是可选的。
如果没有指 定,那么 sed 将在所有行上进行替换。
s 即执行替换命令 substitute original-string 是被 sed 搜索然后被替换的字符串,它可以是一个正则表达式 replacement-string 替换后的字符串 substitute-flags 是可选的
sed 's/A/a/' test.txt
将test.txt文件中所有行的大写A替换成小写的a
(9)全局标志 g
sed 's/A/a/g' test.txt
将test.txt文件中所有的大写A替换成小写的a
(10)忽略大小写 i
使用i参数则直接会修改输入的文件内容,使用前思考或者备份原文件。
替换标志 i 代表忽略大小写。
sed -i 's/a/b/g' test.txt
将该文件中所有的大小写a替换成小写b
(11)sed替换命令分界符
默认的分界符为 /
但我们如果要更改或者使用分界符的时候,就需要使用 \ 来转义,也可以用@ # 等来转义。
$ sed 's/\/usr\/local\/bin/\/usr\/bin/' path.txt
(12)&,获取匹配到的模式
$ sed 's/^[0-9][0-9]/[&]/g' test.txt
[10],John Doe,CEO
[12],Jason Smith,IT Manager
(13)正则表达式
行的开头 ( ^ ) ^ 匹配每一行的开头
行的结尾 ( $ ) $匹配行的结尾。
单个字符 ( . ) 元字符点 . 匹配除换行符之外的任意单个字符。
匹配 0 次或多次 ( * ) 星号*匹配 0 个或多个其前面的字符。如:1* 匹配 0 个或多个 1
匹配一次或多次 ( \+ ) “\+”匹配一次或多次它前面的字符,例如 空格\+ 或 “ \+”匹配至少一个或多个空格。
零次或一次匹配 ( \? ) \?匹配 0 次或一次它前面的字符
转义字符 ( \ ) 如果要在正则表达式中搜寻特殊字符(如:*,.),必需使用\来转义它们
字符边界 ( \b ) \b 用来匹配单词开头(\bxx)或结尾(xx\b)的任意字符,因此\bthe\b 将匹配 the,但不匹配 they. \bthe 将匹配 the 或 they
(14)sed的附加命令
a
使用命令 a 可以在指定位置的后面插入新行。
i
插入命令 insert 命令和追加命令类似,只不过是在指定位置之前插入行
c
修改命令 change 可以用新行取代旧行。
=
会显示行号