Unix Sed 教程:追加、插入、替换和计数文件行
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
- 点赞
- 收藏
- 关注作者
评论(0)