Linux 删除文件的特定行(第一行,前n行,最后一行)
March 26, 2018
当我们编辑文件的时候时候,我们通过可以vi/vim编辑器来删除文件中的特定行,比如删除第一行或者删除最后行或者符合某个模式的行。 但是如何在shell脚本里来删除特定的符合条件的行呢。 这时候,我们可以使用linux下强大的文本处理工具sed。 我们可以通过该命令删除指定的行,或者通过sed命令提供的正则表达式,来查找符合模式匹配的行,然后将其删除。
Table of Contents
删除文件的第一行
如果要删除文件的行,并将其立即应用到源文件,在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%的人还阅读了:
0 Comments