sed详解


sed(Stream EDitor),是一种流编辑器,用于文本编辑

语法

sed [option] 'SCRIPTS' FILE...

SCRIPTS:[Address] [!]Command 命令地址对

SED工作流程
  1. 读取新的一行到模式空间,将“SCRIPTS”的第一个address匹配,如果符合则执行command
  2. 如果address符合则执行command,不符合取下一个地址命令对
  3. 直到所有的地址命令对应用完,输出模式空间的内容
选项
选项 功能
-f FILE 调用sed脚本处理文件
-n 抑制默认内容输出,常与p命令连用
-r 支持扩展元字符
-iSUFFIX 修改源文件,同时创建一个备份文件,备份文件名为源文件名SUFFIX
SCRIPS

格式:[Address] [!]Command: !不执行后面的命令

address:

  • 空地址:匹配所有行
  • $:匹配最后一行
  • N:匹配第N行
  • N~M:从N行开始,每隔M-1行匹配
  • N,M:匹配N到M行
  • /PATTREN/:正则匹配的行

Command:包括模式空间命令和保持空间命令

模式空间命令

模式空间:可以想成工程里面的流水线,数据之间在它上面进行处理。

  • d ,删除模式空间的内容
  • p , 打印模式空间的内容
  • s///FLAG , 替换搜索 FLAG:g全局搜索
  • a\string ,append,追加内容
  • i\string ,insert,插入内容
  • c\string ,change,替换内容
  • = , 打印行号
  • l ,打印内容包括控制字符
  • y// , 字符装换
  • n next ,读取下一行到模式空间
  • r FILE , read读取文件内容到指定行
  • w FILE , write保存指定行到文件
  • [line-address]q , quit退出
  • N ,读取下一行内容到模式空间,以\n拼接上一行内容
  • P ,P打印当前模式空间开端至\n的内容,并追加到默认输出之前
  • D ,删除模式空间上一行的内容,并继续执行命令
保持空间命令

保持空间:可以想象成仓库,我们在进行数据处理的时候,作为数据的暂存区域。

  • h/H ,hold,将模式空间的内容覆盖h(追加H)到保持空间
  • g/G ,get,将保持空间内容覆盖g(追加G)到模式空间
  • x ,exchange,交换两个空间的内容
sed使用实例

测试文件内容

[root@localhost tmp]# cat test.txt 
This is the header line.
This is the first data line.
This is the second data line.
This is the last data line.
1、打印: p 命令

命令 p 是打印命令,用于显示模式空间的内容。默认情况下, sed 把输入行打印在屏幕上,选项-n 用于取消默认打印操纵。当选项-n 和命令 p 同时出现时, sed 可打印选定的内容

例子1:打印2行的内容

[root@localhost tmp]# sed '2p' test.txt 
This is the header line.
This is the first data line.
This is the first data line.
This is the second data line.
This is the last data line.

说明:默认情况下, sed 把所有输入行都打印在标准输出上。如果在某一行匹配到 north, sed就把该行另外打印一遍。

例子2:打印匹配first的行,并抑制未选定行输出

[root@localhost tmp]# sed -n '/first/p' test.txt     
This is the first data line.

说明:默认情况下, sed 打印当前缓存区中的输入行。命令 p 指示 sed 将再次打印该行。选项-n 取消 sed 取消默认打印操作。选线-n 和命令配合使用,模式缓冲区内的输入行,只被打印一次。如果不指定-n 选项, sed 就会像上例中那样,打印出重复的行。如果指定了-n,则sed 只打印包含匹

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sed(Stream Editor)是一种流式文本编辑器,它可以在处理文件时实时编辑文本流。它是一个非交互式的编辑器,可以从标准输入或文件中读取文本,并将结果输出到标准输出。Sed主要用于自动化文本编辑任务,例如搜索和替换、删除行、转换字符、添加或删除行等。以下是Sed常用的命令和选项: ## 基本语法 sed [选项]... [脚本] [输入文件]... - 选项:用于指定Sed的行为,例如-i选项表示原地修改文件。 - 脚本:用于指定Sed的操作,例如s/old/new/表示将文本中的old替换为new。 - 输入文件:要处理的文件名或标准输入。 ## 常用命令 1. 替换文本 替换命令格式为:s/old/new/g,其中old表示要被替换的文本,new表示替换后的文本,g表示全局替换。 示例: ``` sed 's/old/new/g' file.txt # 将file.txt中的old替换为new sed -i 's/old/new/g' file.txt # 将file.txt中的old替换为new,并原地修改文件 ``` 2. 删除行 删除命令格式为:d,表示删除当前行。 示例: ``` sed '1d' file.txt # 删除file.txt的第一行 sed '1,3d' file.txt # 删除file.txt的第1-3行 sed '/pattern/d' file.txt # 删除file.txt中匹配pattern的行 ``` 3. 插入和追加行 插入和追加命令格式为:i和a,分别表示在当前行前插入和在当前行后追加一行文本。 示例: ``` sed '1i new line' file.txt # 在file.txt的第一行前插入new line sed '1a new line' file.txt # 在file.txt的第一行后追加new line ``` 4. 替换指定行 替换指定行命令格式为:numc\new text,其中num表示要替换的行号,new text表示替换后的文本。 示例: ``` sed '1c\new line' file.txt # 将file.txt的第一行替换为new line ``` ## 常用选项 1. -i -i选项表示原地修改文件,即在文件中直接修改文本,而不是输出到标准输出。 示例: ``` sed -i 's/old/new/g' file.txt # 将file.txt中的old替换为new,并原地修改文件 ``` 2. -n -n选项表示禁止输出文本,只有通过p命令才能输出。 示例: ``` sed -n '/pattern/p' file.txt # 只输出包含pattern的行 ``` 3. -e -e选项表示允许多个编辑命令。 示例: ``` sed -e 's/old/new/g' -e '1d' file.txt # 将file.txt中的old替换为new,并删除第一行 ``` 4. -r -r选项表示启用正则表达式的扩展语法。 示例: ``` sed -r 's/(\w+) (\w+)/\2, \1/' file.txt # 将file.txt中的每行文本中的第一个单词和第二个单词颠倒顺序 ``` 以上是Sed的基础用法,还有许多高级特性和选项可以掌握,例如正则表达式、标签、分组等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值