Sed命令语法

本文详细介绍了sed命令的基本语法及其使用方法,包括如何通过不同格式的指令来处理文本文件中的行替换等操作。通过对比两个sed脚本的例子,展示了如何正确地应用sed命令实现特定行的替换功能。

sed命令语法
第一种:[address]command
   某些只能接受单个行地址,它们不能应用于某个范围的行,那么他的语法就是如下
第二种:[line-address]command
   还可以用大括号进行分组以使其作用于同一个地址:如下
第三种:address{
command1;
command2;
command3;
}
注意最后一个大括号要独占一行,而且要开头,后面不能接空格,括号里多个命令处于同一行,多个命令之间要加分号,比如n;d,d前可以有空格或者tab
例如
 #!/bin/sed
  2 /root/{
  3 s/root/555/g;
  4 s/bin/666/g;
  5
  6 }
  讲个小区别
  第一个脚本
 #!/bin/sed
/root/s/root/555/g;
/root/s/bin/666/g;
第二个脚本
#!/bin/sed
  2 /root/{
  3 s/root/555/g;
  4 s/bin/666/g;
  5
  6 }
 
  这两个脚本同时作用在/etc/passwd上
  第一个脚本,root行的bin不会换掉,因为第二句已经找不到有root的行了,因为root已经被第一句命令都换成换成555.
  而第二个脚本,root行的bin会换掉,因为只用的一个寻找命令,找到root的行后,会执行把root换成555的命令,然后在这行把bin换成666

 

 

<think>我们之前已经详细讨论了sed的基本概念和用法,现在用户询问“sed 编辑命令语法”,需要聚焦于sed命令语法结构。 根据历史记录,我们已经覆盖了核心命令(s, d, p, i, a等)和高级用法(地址定位、多命令组合等)。本次回答应系统化梳理语法规则。 注意:必须包含示例代码块,并在最后提出3-5个相关问题,且以“§§相关问题§§”开头。 计划结构: 1. 概述sed命令的基本语法格式 2. 详细解释各个组成部分(地址、命令、选项等) 3. 给出多种命令语法示例(替换、删除、插入等) 4. 补充高级语法(分支、标签、多行处理等) 5. 注意事项(如特殊字符转义) 注意:使用中文回答,且末尾必须按照格式要求提出问题。 </think>### sed 编辑命令语法详解 `sed` 的编辑命令语法遵循 **`[地址]命令[参数]`** 结构,通过地址定位与命令组合实现精准文本操作。所有命令必须包含在单引号或双引号中,支持并行执行多个指令。 --- #### 核心语法结构 ```bash sed '[地址范围] 命令字母 [分隔符][参数][分隔符][标志]' 文件名 ``` #### 地址定位规则 | 地址类型 | 示例 | 含义 | |----------------|----------------------|------------------------| | 绝对行号 | `5s/old/new/` | 仅处理第5行 | | 行号范围 | `10,20d` | 删除10-20行 | | 正则匹配 | `/^#/d` | 删除以#开头的行 | | 相对地址 | `$` | 末行 | | 步进地址 | `1~2p` | 奇数行打印 | | 嵌套地址 | `/start/,/end/s/old/new` | 区间内替换 | --- #### 编辑命令全集 | 命令 | 语法格式 | 功能描述 | 示例 | |------|----------|----------|------| | **s** 替换 | `s/模式/替换/[标志]` | 文本替换 | `sed 's/foo/bar/g'` | | **d** 删除 | `[地址]d` | 删除行 | `sed '/error/d'` | | **p** 打印 | `[地址]p` | 打印行 | `sed -n '1,5p'` | | **i** 插入 | `[地址]i\文本` | 行前插入 | `sed '3i\插入内容'` | | **a** 追加 | `[地址]a\文本` | 行后追加 | `sed '$a\文件尾'` | | **c** 修改 | `[地址]c\文本` | 整行替换 | `sed '/old/c\新内容'` | | **y** 转换 | `y/原字符集/新字符集/` | 字符映射 | `sed 'y/abc/ABC/'` | | **r** 读文件 | `[地址]r 文件名` | 插入文件 | `sed '/END/r data.txt'` | | **w** 写文件 | `[地址]w 文件名` | 导出内容 | `sed '/OK/w ok.log'` | --- #### 特殊符号处理 1. **分隔符替代方案** 当文本含`/`时改用其他符号: ```bash sed 's|/usr/bin|/opt/bin|' # 使用 | 分隔 sed 's@old@new@' # 使用 @ 分隔 ``` 2. **元字符转义规则** | 字符 | 转义形式 | 用途 | |------|-----------|------| | `&` | `\&` | 代表匹配内容 | | `\n` | `\\n` | 换行符 | | `$` | `\$` | 字面美元符 | ```bash sed 's/version/& 2.0/' # 输出:version 2.0 ``` --- #### 标志位控制 | 标志 | 作用 | 示例 | |------|------|------| | `g` | 全局替换 | `s/old/new/g` | | `p` | 打印修改行 | `s/old/new/p` | | `i` | 忽略大小写 | `s/old/new/i` | | `数字` | 替换第n次出现 | `s/old/new/2` | | `w` | 写入文件 | `s/old/new/w log` | --- #### 多指令组合 1. **单行分号分隔** ```bash sed 's/a/A/; s/b/B/; 5d' file ``` 2. **多`-e`选项链** ```bash sed -e 's/old/new/' -e '/pattern/d' file ``` 3. **分支控制** ```bash sed ':start; s/O/o/; t start' # 循环替换直到无O ``` --- #### 实战示例 **1. 条件替换** ```bash # 仅对含"error"的行进行大写转换 sed '/error/ s/[a-z]/\U&/g' log.txt ``` **2. 区间注释** ```bash # 注释掉30-50行 sed '30,50 s/^/#/' config.ini ``` **3. 多步骤清洗** ```bash # 1.删除空行 2.首行缩进 3.尾部加句号 sed '/^$/d; s/^/ /; s/$/。/' text.md ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值