Linux脚本i在1到10之间,(10) linux shell 命令 — sed

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进行处理,非常感谢!

上一篇 2021年4月1日
下一篇 2021年4月1日

相关推荐