Linux 删除文件的特定行(第一行,前n行,最后一行)

当我们编辑文件的时候时候,我们通过可以vi/vim编辑器删除文件中的特定行,比如删除第一行或者删除最后行或者符合某个模式的行。 但是如何在shell脚本里来删除特定的符合条件的行呢。 这时候,我们可以使用linux下强大的文本处理工具sed。 我们可以通过该命令删除指定的行,或者通过sed命令提供的正则表达式,来查找符合模式匹配的行,然后将其删除。

删除文件的第一行

如果要删除文件的行,并将其立即应用到源文件,在sed命令里需要使用-i 选项,否则,只是将删除文件内容显示出来,但不会真正的删除文件的内容。 执行下面的命令:

# sed -i '1d' fio.txt

命令输出如下:

root@devops:~/osetc# cat fio.txt
line1  a
line2  b
line3  c
root@devops:~/osetc# sed -i '1d' fio.txt
root@devops:~/osetc# cat fio.txt
line2  b
line3  c

删除文件的最后一行

通过sed命令删除文件里的最后一行,和上面的删除行的命令类似,都是需要-i选项,并结合d选项进行删除操作,但需要指定要删除行的行号,最后一行可以用$来表示,执行下面命令:

# sed -i '$d' fio.txt

命令输出如下:

root@devops:~/osetc# cat fio.txt
line1  a
line2  b
line3  c
root@devops:~/osetc# sed -i '$d' fio.txt
root@devops:~/osetc# cat fio.txt
line1  a
line2  b

删除文件中指定行

通过上面的两个例子,我们应该知道要删除特定行号的行,只需要将行号跟着d命令的前面即可,比如要删除第3行的内容,可以执行下面的命令:

# sed -i '3d' fio.txt

删除包含特定字符的行

如果你想删除包含特定字符的行,只要通过sed命令的模式匹配部分指定特定字符,然后通过d命令将其删除。
比如要删除包含line2的行,执行下面的命令:

# sed -i '/line2/d' fio.txt

命令输出如下:

root@devops:~/osetc# cat fio.txt
line1  a
line2  b
line3  c
root@devops:~/osetc# sed -i '/line2/d' fio.txt
root@devops:~/osetc# cat fio.txt
line1  a
line3  c

在文件中增加一行内容

我们可以通过sed命令在特定的某行后面增加新行,比如要在包含line1的行后增加一行“line2   b”, 执行下面的命令:

# sed -i '/line1/a line2  b' fio.txt

命令输出如下:

root@devops:~/osetc# cat fio.txt
line1  a
line3  c
root@devops:~/osetc# sed -i '/line1/a line2  b' fio.txt
root@devops:~/osetc# cat fio.txt
line1  a
line2  b
line3  c
root@devops:~/osetc#

在文件中替换特定的行

如果想把文件中的包含line3的行中line3 字符串替换成line4, 可以通过sed工具下的s命令来实现,执行下面的命令:

# sed -i 's/line3/line4/g' fio.txt

命令输出如下:

root@devops:~/osetc# cat fio.txt
line1  a
line2  b
line3  c
root@devops:~/osetc# sed -i 's/line3/line4/g' fio.txt
root@devops:~/osetc# cat fio.txt
line1  a
line2  b
line4  c

从上面的例子我们可以看到sed是一个非常易用好用的linux文本行处理工具。


99%的人还阅读了:

Leave a Reply