【linux】sed命令详解

目录

功能

命令语法

选项:options

命令:Commands

文本位置:address

sed编程举例

1 替换文件中的字符串

2 删除文件中的行

3 在文件中插入内容

4 显示整个文件

5 从文件中提取特定行

6 使用脚本文件进行文本处理


前言

sed(stream editor)是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。

功能

Linux SED逐行处理。文件的每一行都被单独读取处理,然后再次输出。SED最重要的功能是在文件中搜索某些字符串,然后用其他字符替换它们。

命令语法

不管是使用shell命令行方式或脚本文件方式,如果没有指定输入文件,sed从标准输入中接受输入,一般是键盘或重定向结果。

sed [Option(s)] 'Command(s)' [File(s)]

  • options 选项
  • Commands sed命令
  • Files 输入文件

选项:options

选项描述
-e指定
-f从文件中读取sed命令
-n不输出
-iin-place:直接修改文件内容
-u从输入文件加载最小数量的数据并更频繁地刷新输出缓冲器
-r在脚本中使用扩展正则表达式

命令:Commands

模式空间(pattern space):模式空间是 sed 处理文本时所使用的主要缓冲区。它会读入一行文本,并在其中进行编辑操作。当 sed 处理完一行文本后,它会将该行文本输出到标准输出并清空模式空间,然后读取下一行文本。

保留空间(hold space):是一个额外的缓冲区,可以在 sed 命令执行过程中存储额外的文本。

可以使用 sed 命令的 "h" 和 "H" 命令将 pattern space 中的文本复制到 hold space 中。可以使用 "g" 和 "G" 命令将 hold space 中的文本复制到 pattern space 中。

命令描述
aappend:追加文本
iinsert:插入文本,在所选的行前插入一行或多行文本
llisting:显示所有不可打印的标志
cchange:将新的文本替代所选择的行
ddelete:删除所选择的行
gget:将内容从保留空间复制到模式空间
GGetNewline:将保留空间中的内容粘贴到模式空间中
hhold:将内容从模式空间复制到保留空间
HHoldNewLine:将内容从模式空间粘贴到保留空间。
nnext:读取下一行的文本到模式空间
pprint:打印当前的模式空间
qquit:退出LINUX Sed
rread:追加从文件读取的文本
ssubstitute:用一个特定的文本替代模式空间的内容
xexchange:交换保留空间与模式空间的文本内容
yyank:将特定的文本替换模式空间的内容
wwrite:将当前模式空间的第一行开始的内容写入文件

文本位置:address

在 Linux 的 sed 命令中,address 是指定要操作的文本的位置。 sed 命令可以根据不同的 address 来执行不同的操作。常见的 address 有:

  1. 行号地址: 以数字开头,表示要操作的行号。例如,/^/表示匹配每一行的开头。

  2. 正则表达式地址: 以斜杠开头,后面跟着一个正则表达式。例如,/^\\s*\\S+/表示匹配每一行的开头,后面跟着零个或多个空格,然后是一个或多个非空格字符。

  3. 范围地址: 以数字和逗号开头,表示要操作的行号范围。例如,1,5表示操作第1行到第5行。

  4. 模式地址: 以斜杠和模式开头,表示要操作的模式。例如,/pattern/表示匹配包含"pattern"的行。 sed 命令可以根据不同的 address 来执行不同的操作,例如替换、删除、插入等。

sed编程举例

假定以下例子的输入文件名为:test.txt,文件内容如下:

hello world,this is a test.
sed is a stream editor.
Linux SED proceeds line by line.
The SED command works with commands and is applied to files.
the tool is mainly used in shell programming

1 替换文件中的字符串

使用sed命令可以将"hello world"字符串替换为"hi there",命令如下:

sed -i 's/hello world/hi there/g' test.txt

其中,-i选项表示直接修改原文件,s表示替换操作,/hello world/表示要被替换的字符串,/hi there/表示替换后的字符串,g表示全局替换。

输出:

2 删除文件中的行

使用sed命令可以删除其中的某一行,例如删除第5行,命令如下:

sed -i '5d' test.txt

其中,5d表示删除第5行

输出:

3 在文件中插入内容

使用sed命令可以在其中插入一行文本,例如在第3行后插入一行"new line",命令如下:

sed -i '3anew line' test.txt

其中,-i选项表示直接修改原文件,3a表示在第3行后插入,new line表示要插入的文本。

输出:

4 显示整个文件

使用如下命令

sed -n '1,$p' test.txt

其中,$为最后一行

输出:

5 从文件中提取特定行

使用sed命令可以提取其中的某几行,例如提取第3到第5行,命令如下:

sed -n '3,5p' test.txt

其中,-n选项表示只输出匹配的行,3,5表示要提取的行的范围,p表示打印匹配的行。、

输出:

6 使用脚本文件进行文本处理

我们可以创建一个名为test.sed的脚本文件,包含以下内容:

s/SED/stream editor/g

这个脚本的意思是将test.txt中所有的"SED"替换为"stream editor"。现在我们可以使用sed命令,并使用-f参数指定test.sed作为脚本文件:

执行如下命令:

sed -f test.sed test.txt

输出:

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linuxsed命令是一个用于文本处理的强大工具。它可以根据指定的编辑命令对输入文件进行操作,并输出结果。sed命令的基本语法如下: sed [选项] sed编辑命令 输入文件 其中,选项是可选的,用于控制sed命令的行为。sed编辑命令是指对文本进行操作的具体命令,可以是单个命令,也可以是多个命令组合在一起。输入文件是要进行处理的文本文件。 sed命令还支持通过管道将shell命令的输出作为输入进行处理,具体语法如下: shell命令 | sed [选项] sed编辑命令 此外,sed命令还可以通过-f选项指定一个sed脚本文件来进行处理,具体语法如下: sed [选项] -f sed脚本文件 输入文件 在使用sed命令时,还可以通过使用一些小技巧来实现特定的功能。例如,可以使用命令连接符";"来输出多行不连续的内容。例如,以下命令会输出passwd文件中的第1行、第3行和第5行: sed -n '1p;3p;5p' passwd 这样,你就能够根据需要使用sed命令来处理文本文件,并实现各种需要的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【Linux篇】sed命令详解](https://blog.csdn.net/weixin_45842494/article/details/124699219)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux - sed命令详解](https://blog.csdn.net/qq_48391148/article/details/125711532)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值