0
点赞
收藏
分享

微信扫一扫

使用sed或awk在文件中间添加一行

成义随笔 08-19 21:00 阅读 22

在日常的 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 写法)
  • 整体逻辑:先输出到临时文件,再覆盖原文件
举报

相关推荐

0 条评论