专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

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

ins518 2024-11-04 13:56:03 技术文章 8 ℃ 0 评论

Sed提供了很多命令来用文件中的行执行许多操作。在本文中,让我们回顾一下如何追加,插入,替换文件中的一行以及如何获取文件的行号。

  • 附加行

  • 插入行

  • 换行

  • 计数线

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

$cat thegeekstuff.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追加示例1.在文件的第三行之后添加一行。

在第三行之后添加“酷小工具和网站”这一行。sed“a”命令在匹配后插入行。

$ sed '3 a\
> Cool gadgets and websites' thegeekstuff.txtLinux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)Cool gadgets and websitesStorage in Linux
Productivity (Too many technologies to explore, not much time available)
Windows- Sysadmin, reboot etc.

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

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

$ sed '/Sysadmin/a \
> Linux Scripting' thegeekstuff.txtLinux SysadminLinux ScriptingDatabases - 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追加示例3.在文件末尾添加一行

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

$ sed '$ a\
> Website Design' thegeekstuff.txtLinux 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行之前添加一行。

在第四行之前添加一行“酷玩小工具和网站”。“a”命令在匹配之后插入行,而“i”在匹配之前插入。

$ sed '4 i\
> Cool gadgets and websites' thegeekstuff.txtLinux Sysadmin
Databases - Oracle, mySQL etc.
Security (Firewall, Network, Online Security etc)Cool gadgets and websitesStorage 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' thegeekstuff.txtLinux ScriptingLinux 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 ScriptingWindows- Sysadmin, reboot etc.

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

在文件的最后一行之前追加一行“网站设计”。

$ sed '$ i\
> Website Design' thegeekstuff.txtLinux 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 DesignWindows- Sysadmin, reboot etc.

用Sed命令替换行

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

Syntax:
#sed 'ADDRESS c\
new line' filename
#sed '/PATTERN/ c\
new line' filename

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

下面的命令用“The Geek Stuff”代替文件的第一行。

$ sed '1 c\
> The Geek Stuff' thegeekstuff.txtThe Geek StuffDatabases - 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系统管理员”模式的everyline替换为“Linux系统管理员 - 脚本”。

$ sed '/Linux Sysadmin/c \
> Linux Sysadmin - Scripting' thegeekstuff.txtLinux Sysadmin - ScriptingDatabases - 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命令将文件的最后一行替换为“文件的最后一行”。

$ sed '$ c\
> Last line of the file' thegeekstuff.txtLinux 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中将当前行号打印到标准输出的命令。

Syntax:
#sed '=' filename

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

sed'='命令只接受一个地址,所以如果你想为一系列行打印行号,你必须使用花括号。

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

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

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

$ sed -n '/Databases/=' thegeekstuff.txt
2

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

从模式“Oracle”到“生产力”打印行匹配的行号。

$ sed -n '/Oracle/,/Productivity/{
> =
> p
> }' thegeekstuff.txt2
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'$ ='thegeekstuff.txt

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表