sed命令的语法如下所示:
sed [options] script filename
同大多数Linux命令一样,sed也是从stdin中读取输入,并且将输出写到stdout,但是当filename被指定时,则会从指定的文件中获取输入,输出可以重定向到文件中,但是需要注意的是,该文件绝对不能与输入的文件相同。
options是指sed的命令行参数,这一块并不是重点,参数也不多。
script是指需要对输入执行的一个或者多个操作指令(instruction),sed会依次读取输入文件的每一行到缓存中并应用script中指定的操作指令,因此而带来的变化并不会影响最初的文件(注:如果使用sed时指定-i参数则会影响最初的文件)。如果操作指令很多,为了不影响可读性,可以将其写到文件中,并通过-f参数指定scriptfile:
sed -f scriptfile filename
1. script
1. 替换操作
在sed的替换操作中,其script的格式如下。
[address]s/pattern/replacement/flags
其中,[address]的作用是指定要进行替换操作的行。
1. 若没有[address],则说明要对每一行进行替换操作。
2. 若[address]是一个正则表达式,说明只对符合正则表达式的行进行替换操作。
3. 若[address]只指定了一个地址,说明只对该地址进行替换操作。
4. 若[address]指定了两个地址,说明是对这两个地址之间的行(包括这两个地址)进行替换操作。
s的意思是告诉sed是进行替换(substitute)操作。pattern是要被替换的内容,可以是正则表达式的形式。replacement是替换的内容。flags是替换的标识。
1. 若flags没有,则只替换一个匹配的地方。
2. 若flags是一个数字n(取值范围1-512),表明仅替换前n个被pattern匹配的内容。
3. 若flags是符 g,表明是替换改行所有匹配到的内容。
4. 若flags是ng,表明是从第n处开始替换。
比如说,有如下一个文本。
%%bash
cat sed_sample.txt
赏花归去马如飞,
去马如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
%%bash
sed ‘s/马/牛/g’ sed_sample.txt
赏花归去牛如飞,
去牛如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
或者只修改第2行的马字,修改成牛字。
%%bash
sed ‘2s/马/牛/g’ sed_sample.txt
赏花归去马如飞,
去牛如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
2. 行替换
在sed的行替换操作中,其script的格式如下。
[address]ctext
其中,[address]的用法和替换操作一样。 text是要进行替换的内容。该指令的意思是,将匹配的行替换成文本text
例如,将第一行到第三行替换成“这是一个行替换”。
%%bash
sed ‘1,3c这是一个行替换’ sed_sample.txt
这是一个行替换
醒时已暮赏花归。
3. 删除操作
在sed的删除操作中,其script的格式如下。
[address]d
其中,[address]的用法和在替换操作中的一样。d是删除标识。
比如,我们要删除文本的前两行。
%%bash
sed ‘1,2d’ sed_sample.txt
酒力微醒时已暮,
醒时已暮赏花归。
或者删除带 “花”字的行。
%%bash
sed ‘/花/d’ sed_sample.txt
去马如飞酒力微;
酒力微醒时已暮,
有人会问,那我只想删除文本中的”花”字,而不是删除整行,那该如何做其实只要将”花”字替换成空即可。
%%bash
sed ‘s/花//g’ sed_sample.txt
赏归去马如飞,
去马如飞酒力微;
酒力微醒时已暮,
醒时已暮赏归。
删除空白行
%%bash
echo -e “未操作前:”
cat sed_sample.txt
echo -e “nn操作后:”
sed ‘/^$/d’ sed_sample.txt
未操作前:
赏花归去马如飞,
去马如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
操作后:
赏花归去马如飞,
去马如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
其中,^代表一行的开始,$代表一行的结束。
4. 插入和追加操作
sed 的插入和追加操作如下:
插入
[line-address]itext
在匹配行的前方插入文本
追加
[line-address]atext
在匹配行的后方插入文本
例如,在文本的最开始,插入“你好”,在文本的最后,插入,“再见”
%%bash
sed ‘1i你好’ sed_sample.txt
你好
赏花归去马如飞,
去马如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
%%bash
sed ‘$a再见’ sed_sample.txt
赏花归去马如飞,
去马如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
再见
5. 其他操作
sed 还有如下的操作。
名称
命令
语法
说明
替换
s
[address]s/pattern/replacement/flags
替换匹配的内容
删除
d
[address]d
删除匹配的行
插入
i
[line-address]itext
在匹配行的前方插入文本
追加
a
[line-address]atext
在匹配行的后方插入文本
行替换
c
[address]ctext
将匹配的行替换成文本text
打印行
p
[address]p
打印在模式空间中的行
打印行
=
[address]=
打印当前行行
打印行
l
[address]l
打印在模式空间中的行,同时显示控制字符
转换字符
y
[address]y/SET1/SET2/
将SET1中出现的字符替换成SET2中对应位置的字符
读取下一行
n
[address]n
将下一行的内容读取到模式空间
读文件
r
[line-address]r file
将指定的文件读取到匹配行之后
写文件
w
[address]w file
将匹配地址的所有行输出到指定的文件中
退出
q
[line-address]q
读取到匹配的行之后即退出
2. [options]指令
[options]指令最常见的有
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后 ,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
-n 的使用效果如下
%%bash
sed -n ‘s/马/牛/g’ sed_sample.txt
cat sed_sample.txt
赏花归去马如飞,
去马如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
-i 的使用效果如下
%%bash
sed -i ‘s/马/牛/g’ sed_sample.txt
cat sed_sample.txt
赏花归去牛如飞,
去牛如飞酒力微;
酒力微醒时已暮,
醒时已暮赏花归。
3. sed help
%%bash
sed –help
用法: sed [选项]… {脚本(如果没有其他脚本)} [输入文件]…
-n, –quiet, –silent
取消自动打印模式空间
-e 脚本, –expression=脚本
添加“脚本”到程序的运行列表
–follow-symlinks
直接修改文件时跟随软链接
-i[SUFFIX], –in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
-l N, –line-length=N
指定“l”命令的换行期望长度
–posix
关闭所有 GNU 扩展
-r, –regexp-extended
在脚本中使用扩展正则表达式
-s, –separate
将输入文件视为各个独立的文件而不是一个长的连续输入
-u, –unbuffered
从输入文件读取最少的数据,更频繁的刷新输出
-z, –null-data
separate lines by NUL characters
–help 打印帮助并退出
–version 输出版本信息并退出
如果没有 -e, –expression, -f 或 –file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。
GNU版sed主页: 。
使用GNU软件所需帮助文档: 。
将错误 告通过电子邮件发送到:.
请务必将单词“sed”放在标题的某处。
文章知识点与官方知识档案匹配,可进一步学习相关知识CS入门技能树Linux实用命令sed命令25046 人正在系统学习中 相关资源:蓦然记忆助手2.0触屏加强版-管理软件工具类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!