Loading... 在 Linux 中,`tr` 和 `sed` 都是用于文本处理的实用工具,但它们在替换文本方面有一些区别: ### 区别: 1. **替换范围**: * `tr`:基于字符的替换,只能替换单个字符。 * `sed`:支持正则表达式,可以匹配更复杂的文本模式,实现更灵活的替换操作。 2. **功能复杂度**: * `tr`:主要用于字符替换和删除操作,功能相对简单。 * `sed`:提供了更多文本编辑功能,包括插入、删除、替换等,更适用于复杂的文本处理需求。 ### `tr` 命令: * **主要功能**:`tr` 命令用于字符替换和删除。 * **语法**:`tr [OPTION] SET1 [SET2]` * **示例用法**: * 将文本中的小写字母转换为大写字母:`tr 'a-z' 'A-Z'` * 删除所有空格:`tr -d ' '` #### 示例 * 通用用法 ``` echo 12345 | tr '0-9' '9876543210' //加解密转换,替换对应字符 cat text| tr '\t' ' ' //制表符转空格 ``` * tr删除字符 ``` cat file | tr -d '0-9' // 删除所有数字 ``` -c 求补集 ``` cat file | tr -c '0-9' //获取文件中所有数字 cat file | tr -d -c '0-9 \n' //删除非数字数据 ``` * tr压缩字符 tr -s 压缩文本中出现的重复字符;最常用于压缩多余的空格: ``` cat file | tr -s ' ' ``` * 字符类 tr中可用各种字符类:\* alnum:字母和数字 * alpha:字母 * digit:数字 * space:空白字符 * lower:小写 * upper:大写 * cntrl:控制(非可打印)字符 * print:可打印字符 使用方法:tr [:class:] [:class:] ``` tr '[:lower:]' '[:upper:]' ``` ### `sed` 命令: * **主要功能**:`sed` 是流编辑器,用于对文本进行编辑。 * **语法**:`sed OPTIONS 'command' file` * **示例用法**: * 替换文本中所有匹配特定模式的字符串:`sed 's/pattern/replacement/g' file` * 删除特定行:`sed '/pattern/d' file` #### 示例 * 首处替换 ``` sed 's/text/replace_text/' file //替换每一行的第一处匹配的text ``` * 全局替换 ``` sed 's/text/replace_text/g' file ``` 默认替换后,输出替换后的内容,如果需要直接替换原文件,使用-i: ``` sed -i 's/text/repalce_text/g' file ``` * 移除空白行 ``` sed '/^$/d' file ``` * 变量转换 已匹配的字符串通过标记&来引用. ``` echo this is en example | sed 's/\w+/[&]/g' $>[this] [is] [en] [example] ``` * 子串匹配标记 第一个匹配的括号内容使用标记 1 来引用 ``` sed 's/hello\([0-9]\)/\1/' ``` * 双引号求值 sed通常用单引号来引用;也可使用双引号,使用双引号后,双引号会对表达式求值: ``` sed 's/$var/HLLOE/' ``` 当使用双引号时,我们可以在sed样式和替换字符串中指定变量; ``` eg: p=patten r=replaced echo "line con a patten" | sed "s/$p/$r/g" $>line con a replaced ``` * 其它示例 字符串插入字符:将文本中每行内容(ABCDEF) 转换为 ABC/DEF: ``` sed 's/^.\{3\}/&\//g' file ``` ### 总结: > 在简单的字符替换和删除操作上,`tr` 更为方便快捷; > > 而在复杂的文本编辑需求,包括模式匹配和多行处理时,`sed` 更为强大。 最后修改:2024 年 07 月 18 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏