在日常的 Linux 系统管理或文本处理工作中,我们经常需要对现有文件进行编辑,其中在指定行号插入新内容是一项常见操作。
本文将详细介绍如何使用sed及awk命令,在文件的特定行号位置插入文本,并涵盖各种实用场景和进阶技巧。
基础方法:使用 sed 命令插入行
sed(Stream Editor)是 Linux 系统中处理文本流的强大工具,它支持在不打开文件的情况下对文本进行各种编辑操作,包括插入、删除、替换等。
基本语法
在指定行号前插入新内容的基本语法如下:
sed -i '行号i要插入的内容' 目标文件
案例演示
举例而言,假设有一个名为file1.txt的文本文件,其内容呈现如下:
$ cat file1.txt
this is line one
this is line two
this is line three
此刻,若要在上述文件的第3行插入文本HelloWorld
。
为达成此目的,可以运用以下命令来满足需求:
sed -i '3iHelloWorld' file1.txt
下面详细说明各参数:
sed
:此为命令本身。-i
:该参数表示在同一文件中进行内容更新。3
:代表即将插入新行的行号。i
:此参数用于告知sed执行插入行操作。HelloWorld
:即为要添加的文本。file1.txt
:是指需要添加新行的目标文件。
上述命令会在file1.txt文件的第3行插入内容。下面我们来查看一下文件的内容:
$ cat file1.txt
this is line one
this is line two
HelloWorld
this is line three
进阶用法:处理复杂场景
1. 插入多行内容
如果需要插入多行文本,可以使用\n作为换行符,或使用sed的多行模式。
- 方法 1:使用换行符
sed -i '3iLine 1\nLine 2\nLine 3' file1.txt
- 方法 2:使用多行输入模式
sed -i '3i\
Line 1\
Line 2\
Line 3' file1.txt
执行后,文件第 3 行前会插入 3 行新内容。
2. 在文件开头或结尾插入
在第 1 行前插入(文件开头):
sed -i '1iStart of file' file1.txt
在最后一行后插入(文件结尾):
sed -i '$aEnd of file' file1.txt # $表示最后一行,a表示在指定行后插入
3. 备份原文件
使用-i参数直接修改文件存在一定风险,可在修改前自动创建备份:
sed -i.bak '3iHelloWorld' file1.txt
此命令会在修改file1.txt的同时,创建名为file1.txt.bak的备份文件。
4. 插入包含特殊字符的内容
当插入的内容包含/、&等特殊字符时,需要使用转义符\:
sed -i '3ihttp:\/\/example.com' file1.txt # 插入包含/的URL
awk 命令实现插入
除了sed,awk也是处理文本的强大工具,同样可以实现按行号插入内容:
awk -v n=3 -v text="HelloWorld" 'NR == n {print text} 1' file1.txt > temp.txt && mv temp.txt file1.txt
参数说明:
-v n=3
:定义变量 n 为行号 3-v text="HelloWorld"
:定义要插入的文本NR == n {print text}
:当行号等于 n 时,打印插入文本1
:表示打印所有行(awk 的 shorthand 写法)- 整体逻辑:先输出到临时文件,再覆盖原文件