Linux文本编辑三剑客---sed

本文深入讲解sed编辑器的使用方法,包括基本选项、编辑命令、地址定界以及高级编辑技巧。通过实例演示如何进行文本处理,如删除空白行、逆向显示文件内容等。

sed:编辑器

        sed :Stream Editor,行编辑器:

用法:

        sed [option]...  'script' inputfile..

常用选项
选项解释
-n不输出模式中的内容至屏幕
-e多点编辑,也就是一条命令进行多次的编辑
-f /PATH/TO/SCRIPT_FILE从指定脚本文件中读取编辑脚本
-r支持使用扩展正则表达式
-i原处编辑及修改原文件(原处修改时,不要加编辑命令p)

 

 

 

 

 

 

 

示例1:选项-n的作用(-n一般要与p选项连用)

示例2:选项-e的作用

示例3:选项-f的作用

示例4:选项 -i的作用

编辑命令
命令解释
d删除
p显示模式空间中的内容
a \text在行后面追加文本;支持使用\n实现多行追加
i \text在行前面追加文本;支持使用\n实现多行追加
c \text替换行为单行或多行文本
w /path/to/somefile保存模式空间匹配到的行至指定文件中
r /path/to/somefile读取指定文件中的文本流至模式空间中匹配到的行的行后
=为模式空间中的行打印行号
!取反条件,放置在编辑命令之前
s///

替换;支持使用其他分隔符:s@@@,s###

替换标记:

              g:行内全局替换

              p:显示替换成功的行;

             w /PATH/TO/SOME/FILE:将替换成功的结果保存至指定的文件中

  

 

 

 

 

 

 

 

 

 

 

 

 

 

示例1:编辑命令 d的作用(删除空白行)

示例2:编辑命令a \text的作用

示例3:编辑命令 i \text的作用

示例4:编辑命令c \text的作用

示例5:编辑命令w /path/to/somefile的作用

示例6:编辑命令r /path/to/somefile的作用

示例7:编辑命令=的作用

示例8:编辑命令!的作用(放置在编辑命令之前)

示例9:编辑命令s///的作用

地址定界
定界符解释
无定界符号对全文进行处理
a(单地址)匹配第a行进行处理
a, b匹配从第a行到b行进行处理
a,+n匹配从第a行+n行进行处理
/pattern/处理配模式匹配上的每一行
a,/pattern/匹配从a行到模式匹配上的行
/pat1/,/pat2/匹配从模式pat1到模式part2之间的行
~步进

 

 

 

 

 

 

 

 

 

 

示例:定界符号~的作用(分别打印出奇数行以及偶数行)

高级编辑命令
高级编辑命令解释
h把模式空间中的内容覆盖至保持空间中
H把模式空间中的内容追加至保持空间中
g从保持空间中取出数据覆盖至模式空间
G从保持空间中取出数据追加至模式空间
x把模式空间中的内容和保持空间中的内容进行互换操作
n读取匹配到的行的下一行至模式空间
N追加匹配到的行的下一行至模式空间
d删除模式空间中的行
D删除多行模式空间中的所有行

 

 

 

 

 

 

 

 

 

 

 

高级编辑命令的简单示例:

sed -n 'n;p' sed.sh 

作用:匹配偶数行

sed '1!G;h;$!d' sed.sh

作用:逆向显示文件内容

sed '$!N;$!D' sed.sh

作用:显示文件最后两行

sed '$!d' sed.sh

作用:取文件最后一行

 sed 'G' sed.sh

作用:在每行后加空白行

 sed '/^$/d;G' sed.sh

作用:合并多个空白行,并且在每行后增加一行空白行

sed 'n;d' sed.sh

作用:显示奇数行

sed -n '1!G;h;$p' sed.sh

作用:逆向显示文件内容

### 关于 Sed 的使用教程 Sed(Stream Editor)是一个功能强大的流编辑器,广泛应用于 Linux 和 Unix 系统中。它可以高效地完成多种文本处理任务,例如查找、替换、删除以及格式化文本等操作[^1]。 #### 基本语法结构 Sed 的基本语法如下所示: ```bash sed [选项] '地址范围 操作命令' 文件名 ``` - **选项**:常用的选项包括 `-n` 表示只打印经过 `p` 命令处理的内容;`-e` 可以指定多条命令;`-f` 从脚本文件加载命令;`-i` 实现原地修改文件内容。 - **地址范围**:可以是具体的行号或者通过正则表达式匹配的模式。 - **操作命令**:常见的有替换 (`s`)、删除 (`d`)、插入 (`i`) 和追加 (`a`) 等。 --- #### 替换操作 (s 命令) `s` 命令是最常使用的命令之一,用于将特定文本替换为其他文本。其通用形式为: ```bash sed 's/pattern/replacement/flags' ``` - `pattern`: 被替换的目标字符串或正则表达式。 - `replacement`: 新的替代字符串。 - `flags`: 控制行为的标志位,比如 `g` 表示全局替换,`i` 忽略大小写。 ##### 示例代码 假设有一个名为 `example.txt` 的文件,内容如下: ``` hello world error found here another error line ``` 以下是几个典型的替换例子: ```bash # 将所有的 "error" 替换为 "warning" sed 's/error/warning/g' example.txt # 输出结果: # hello world # warning found here # another warning line ``` 如果只想替换每行的第一个匹配项,则省略 `/g` 参数: ```bash sed 's/error/warning/' example.txt # 输出结果: # hello world # warning found here # another error line ``` 还可以利用反向引用捕获分组并重新排列它们: ```bash echo "John Smith" | sed 's/\(.*\), \(.*\)/\2 \1/' # 输入:"Smith, John" # 输出:"John Smith" ``` --- #### 删除操作 (d 命令) `d` 命令用于删除满足条件的行。例如,删除包含某个关键字的所有行: ```bash sed '/pattern/d' 文件名 ``` ##### 示例代码 继续以上述 `example.txt` 文件为例: ```bash # 删除包含 "error" 的所有行 sed '/error/d' example.txt # 输出结果: # hello world ``` 也可以按照行号来删除某一行或多行: ```bash sed '2d' example.txt # 删除第 2 行 sed '2,3d' example.txt # 删除第 2 到第 3 行 ``` --- #### 插入与附加操作 (i/a 命令) - `i` 命令在指定位置之前插入新行。 - `a` 命令在指定位置之后附加新行。 ##### 示例代码 ```bash # 在第二行前插入一条消息 sed '2i This is an inserted line.' example.txt # 输出结果: # hello world # This is an inserted line. # error found here # another error line ``` 对于追加操作: ```bash sed '2a Appended after the second line.' example.txt # 输出结果: # hello world # error found here # Appended after the second line. # another error line ``` --- #### 组合多个命令 可以通过分号 `;` 连接多个命令,在单次调用中完成复杂任务。例如: ```bash sed -e 's/error/warning/g' -e '$ a End of file message' example.txt ``` 上述命令先将所有 `error` 替换为 `warning`,再在最后一行后面追加一段文字。 --- #### 原地编辑 (-i 选项) 当希望直接修改源文件而非仅显示改动时,可启用 `-i` 参数。例如: ```bash sed -i 's/error/warning/g' example.txt ``` 这会永久保存对 `example.txt` 的更改。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值