Unix Sed 教程:追加、插入、替换和计数文件行

举报
Tiamo_T 发表于 2022/01/16 09:57:15 2022/01/16
【摘要】 在本文中,让我们了解如何在文件中追加、插入、替换行以及如何获取文件的行号。

Sed 提供了许多命令来对文件中的行执行许多操作。

在本文中,让我们了解如何在文件中追加、插入、替换行以及如何获取文件的行号。

  • 追加行
  • 插入行
  • 替换行
  • 计数线

让我们首先创建将在下面提到的所有示例中使用的 tiamotxt.txt 文件。

$cat  tiamotxt.txt 
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

使用 sed 命令追加行

Sed 提供了命令“a”,它在每一行之后附加一行地址或模式。

Syntax:

#sed 'ADDRESS a\
	Line which you want to append' filename

#sed '/PATTERN/ a\
	Line which you want to append' filename

Sed Append 示例 1. 在文件的第 3 行之后添加一行。

在第 3 行之后添加“Cool guy and websites ”行。sed “a” 命令在匹配后插入行。


$ sed '3 a\
> Cool guy and websites'  tiamotxt.txt 

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Cool guy and websites
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

Sed Append 示例 2. 在匹配模式的每一行后追加一行

下面的 sed 命令将在与模式“Sysadmin”匹配的每一行之后添加“Linux Scripting”行。

$ sed '/Sysadmin/a \
> Linux Scripting' tiamotxt.txt 

Linux Sysadmin
Linux Scripting
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.
Linux Scripting

Sed Append 示例 3. 在文件末尾追加一行

以下示例在文件末尾附加了“网站设计”行。

$ sed '$ a\
> Website Design' tiamotxt.txt 

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.
Website Design

使用 sed 命令插入行

Sed 命令“i”用于在具有范围或模式的每一行之前插入一行。

Syntax:

#sed 'ADDRESS i\
	Line which you want to insert' filename

#sed '/PATTERN/ i\
	Line which you want to insert' filename

Sed 插入示例 1. 在该行的第 4 行之前添加一行。

在第 4 行之前添加一行“Cool guy and websites”。“a”命令在匹配之后插入行,而“i”在匹配之前插入。

$ sed '4 i\
> Cool guy and websites' tiamotxt.txt 

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Cool gadgets and websites
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

Sed 插入示例 2. 在带有模式的每一行之前插入一行

下面的 sed 命令将在与名为“Sysadmin”的模式匹配的每一行之前添加一行“Linux Scripting”。

$ sed '/Sysadmin/i \
> Linux Scripting' tiamotxt.txt 

Linux Scripting
Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Linux Scripting
Windows- Sysadmin, reboot etc.

Sed 插入示例 3. 在文件的最后一行之前插入一行。

在文件的最后一行之前添加一行“Website Design”。

$ sed '$ i\
> Website Design' tiamotxt.txt 

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Website Design
Windows- Sysadmin, reboot etc.

使用 sed 命令替换行

sed 中的“c”命令用于用新的给定行替换与模式或范围匹配的每一行。

Syntax:

#sed 'ADDRESS c\
	new line' filename

#sed '/PATTERN/ c\
	new line' filename

Sed 替换示例 1. 替换文件的第一行

下面的命令将文件的第一行替换为“The Cool Guy”。

$ sed '1 c\
> The Cool Guy' tiamotxt.txt 

The Cool Guy
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

Sed 替换示例 2. 替换与模式匹配的行

将具有模式“Linux Sysadmin”的每一行替换为“Linux Sysadmin – Scripting”。

$ sed '/Linux Sysadmin/c \
> Linux Sysadmin - Scripting' tiamotxt.txt 

Linux Sysadmin - Scripting
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

sed替换示例3.替换文件的最后一行

下面给出的 Sed 命令将文件的最后一行替换为“Last Line of the file”。

$ sed '$ c\
> Last line of the file' tiamotxt.txt 

Linux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)
Storage in Linux
Productivity (Too many technologies to explore, not much time available)
Last line of the file

使用 sed 命令打印行号

“=”是 sed 中用于将当前行号打印到标准输出的命令。

Syntax:

#sed '=' filename

上面的发送命令语法在第一行打印行号,在下一行打印文件的原始行。

sed '=' 命令只接受一个地址,因此如果要打印一系列行的行号,则必须使用大括号。

Syntax:

# sed -n '/PATTERN/,/PATTERN/ {
=
p
}' filename

Sed 行号示例 1. 查找包含模式的行号

下面的 sed 命令打印与模式“数据库”匹配的行号

$ sed -n '/Databases/=' tiamotxt.txt

2

Sed 行号示例 2. 行号的打印范围

打印从模式“Oracle”到“Productivity”匹配行的行号。

$ sed -n '/Oracle/,/Productivity/{
> =
> p
> }' tiamotxt.txt

2
Databases - Oracle, mySQL etc.
3
Security (Firewall, Network, Online Security etc)
4
Storage in Linux
5
Productivity (Too many technologies to explore, not much time available)

sed 行号示例 3. 打印文件中的总行数

文件最后一行的行号将是文件中的总行数。模式 $ 指定文件的最后一行。

$ sed -n '$=' tiamotxt.txt

6
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200