如何使用sed在Linux指定行进行文本操作 (linux 指定行sed)

在Linux系统中,sed是文本编辑工具之一,具有强大的文本处理功能,尤其是在对大量文本进行处理时更加高效。但是,对于初学者来说,使用sed工具在指定行进行文本处理可能会是一个有挑战性的任务。在本篇文章中,我们将提供一些基本的指导,帮助您在使用sed时更方便地在指定行进行文本处理。

什么是sed?

sed是一款文本处理工具,可用于从文件和标准输入流中读取数据,并以行为单位处理读取到的数据。它支持文本替换、删除、插入等基本功能,并可以使用正则表达式进行更复杂的文本处理。sed的主要应用场景包括:

– 批量替换文本

– 删除指定行或删除符合某些条件的行

– 在指定行中插入或追加文本

– 将多行文本合并为一行

– 在指定行前、后或指定位置加入或删除文本块等等。

在本文中,我们着重介绍如何在指定行进行文本处理。

使用sed在指定行进行文本处理

sed命令的基本语法如下:

“` shell

sed ‘expression’ filename

“`

其中,expression为sed命令的参数,用于指定文本处理的逻辑,filename为要处理的文件名。

在sed命令中,行号是非常重要的概念,因为我们通常需要在指定行进行文本处理。因此,以下是在sed中使用行号的一些基本语法。

1. 流模式

在流模式下,sed在处理输入流时逐行处理,因此可以使用行号作为相应处理的匹配条件。使用行号的语法如下:

“` shell

sed ‘3d’ filename

“`

上面的语法表示删除filename文件的第3行。

2. 编辑模式

在编辑模式下,sed在对指定文件进行文本处理时,可以使用地址来指定处理的行范围。常用的地址包括:

– 数字地址:用于指定要处理的行号

“` shell

sed -n ‘3p’ filename

“`

上面的语法表示输出filename文件的第3行,-n选项表示只输出指定行,不输出其他的行。

– 正则表达式地址:用于指定符合正则表达式的行

“` shell

sed -n ‘/pattern/p’ filename

“`

上面的语法表示输出filename文件中匹配”pattern”的所有行,-n选项表示只输出匹配的行。

– 文本范围地址:用于指定要处理的行的范围

“` shell

sed -n ‘3,5p’ filename

“`

上面的语法表示输出filename文件中的第3行到第5行,-n选项表示只输出指定行,不输出其他的行。

– 上下文地址:用于指定上下文的文本块

“` shell

sed -n ‘3,+2p’ filename

“`

上面的语法表示输出filename文件中的第3行到第5行,+2表示向下延伸两行作为上下文。

sed命令中行号的表达式语法非常灵活,但是对于初学者来说,可能需要根据具体需求进行调整。我们建议您在操作之前正确地理解和测试代码。

如何在指定行插入文本?

在sed中,可以使用`i`命令在指定的行之前插入文本,语法如下:

“` shell

sed ‘3i ‘ filename

“`

上面的语法表示在filename文件的第3行之前插入“文本。

同样的,我们也可以在指定行之后插入文本,语法如下:

“` shell

sed ‘3a ‘ filename

“`

上面的命令表示在filename文件的第3行之后插入文本“。

值得注意的是,在sed命令中,如果要插入多行文本,可以使用转义字符`\`来表示换行符,如下所示:

“` shell

sed ‘3i \

Line 1 of text \

Line 2 of text \

Line 3 of text’ filename

“`

上面的命令表示在filename文件的第3行之前插入三行文本。

如何在指定行删除文本?

在sed中,可以使用`d`命令删除指定行的文本,语法如下:

“` shell

sed ‘3d’ filename

“`

上面的命令表示删除filename文件的第3行。

同样的,我们也可以删除某个文本块,以及多行文本。

删除指定文本块的语法如下所示:

“` shell

sed ‘/start/,/end/d’ filename

“`

其中,`start`和`end`表示文本块的开始和结束位置,sed会删除这两行之间的所有内容。

删除多行文本的语法如下所示:

“` shell

sed ‘3,5d’ filename

“`

其中,3和5分别表示要删除的起始行和结束行。

在sed中,有多种删除文本的方式,我们建议您根据特定的需求进行选择。

结语

相关问题拓展阅读:

linux三剑客的基本使用——grep、sed、awk

grep、sed、awk是linux功能非常强大的三个命令,grep是查找过滤文本,sed是对文本进行编辑替换,awk是对文本进行分析报告。

最简单的理解就是找什么东西用grep,想修改什么内容用sed,想格式化内容用awk。

创建一个文件名为grep_text.txt的文件,并放入内容:

SillyMadman is both a madman and a fool.

Everyone agrees with this sentence.

我要查找在grep_text.txt文件里有Silly的行

命令是: grep Silly grep_text.txt

会返回内容:SillyMadman is both a madman and a fool.

也可以带以下参数,这些我认为可能容易用到的参数,其它的参数需要另行查找

文档,比如可以使用正则进行匹配。

内容相关的

-B, –before context=NUM显示所在行之前的行数

-A, –after context=NUM显示所在行之后的行数

-C, –context=NUM打印输出上下文的行数

过滤内容相关的参数:

-i, –忽略大小写区分

-w,–匹配查找的整个单词

-x,–匹配查找的整行文本

-v, –过滤掉匹配的内容

输出内容相关的参数

-n, –行号打印带有输出行的行号

比如,我要查找在grep_text.txt文件里不区分大小写查找sillymadman,并显示行号和匹配文本纯此的下一行,那么我可以用以下命令查找

grep sillymadman grep_text.txt -i -n -A1

内容返回为

1:SillyMadman is both a madman and a fool.

2-Everyone agrees with this sentence.

总体而言grep的使用方式就是

grep (查找的内容) (文件名)

grep也经常搭配管道符号做弊迅”|”使用,比如我要查询某程序的进程,并去掉查找进程本身,那么命令为

ps -ef | grep program_name | grep -v grep

再创建一个文件名为sed_text.txt的文件,并放入内容:

SillyMadman is both a madman and a fool.

Everyone agrees with this sentence.

我想要在之一行下面添加一句:woshishazi

命令是:sed ‘1a\woshishazi’ sed_text.txt

返回内容为:

SillyMadman is both a madman and a fool.

woshishazi

Everyone agrees with this sentence.

但是以上这个命令不会修改原文件,如果需要,需要加上-i

sed -i ‘1a\woshishazi’ sed_text.txt

上面a是代表append,从指定行后面新的一行添加数据,还有其他操作

操作有以下这些

a :从下面一行新增

i :从上面一行插入,

d :删除

c :整行替换

p :打印

s :对指定内容进行替换

下面稍卜晌微举下例:

a: sed ‘1a\woshishazi’ sed_text.txt 从之一行后面添加

i: sed ‘1i\woshishazi’ sed_text.txt 从之一行前面插入

d: sed ‘1d’ sed_text.txt 删除之一行

c: sed ‘1c\woshishazi’ sed_text.txt 替换之一行内容为woshishazi

p: sed -n ‘1p’ sed_text.txt 打印之一行,一般搭配-n使用,其他内容就不会再展示

s:这个相对复杂一点需要详细说明一下

sed的参数为 ‘s/要被替换的内容/新的内容/g’

行是一个可选项,可以选择具体的行进行替换

g代表替换所有匹配到的内容,也可以改为数字,表示第几次匹配到时进行替换

sed ‘s\SillyMadman\shafengzi\g’ sed_text.txt ,将所有SillyMadman替换为shafengzi

输出结果为:

shafengzi is both a madman and a fool.

Everyone agrees with this sentence.

最后再创建一个文件名为awk_text.txt的文件,并放入内容:

1 a

2 b

3 c

4 d

5 f

以空白符作为

分隔符

这个文本相当于每一行有两个字段。

那么打印之一个字段时 awk ‘{print 0的话,则代表打印所有字段

awk默认以空白符作为分隔符,也可以指定分割符通过-F

awk -F: ‘{print $1}’ awk_text.txt,以“:”作为作为分隔符

那么返回内容就为

1 a

2 b

3 c

4 d

5 f

相当于只有一列或者说一个字段

然后还可以对前面加上一个正则对行进行匹配内容

awk ‘/a/{print 2 ~ /a/){print $1}’ awk_text.txt

返回内容为

关于linux 指定行sed的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 如何使用sed在Linux指定行进行文本操作 (linux 指定行sed)