UNIX......
upper:大写字符
xdigit:十六进制字符 清单 6. 将 DOS 文本文件转换为 UNIX 文本文件
tr -d '\r' < input_dos_file.txt > output_unix_file.txt
|
尽管 tr 命令表示了 C locale 环境变量(有关这些环境变量更多的信息,可以使用 man locale),但是不要指望它能够对 UTF-8 文档进行任何合理的操作,如能够使用合适的大写字符替换小写重音字符。tr 命令最适合于 ASCII 和其他标准 C 区域设置。
使用 sed 进行复杂的搜索和替换
tr 命令所提供的单字符替换(或删除)功能非常适用于特定的解决方案,但是这些功能并不是很灵活。如果您需要将一个单词替换为另一个单词,或将连续的空格和制表符替换为一个空格,那又应该怎么办呢?
幸运的是,您可以使用 sed 命令 (Stream EDitor),它提供了功能强大的正则表达式 匹配和替换。正则表达式是使用各种构件构建的复杂模式规范,并且随着模式变得越来越复杂,它看起来就像是调制解调器的线路噪声。本文并不打算详细地介绍正则表达式,但是在本文中,您将简单了解 sed 所使用的一些有用的模式。
在清单 7 中,您可以看到 sed 命令的基本格式。模式是用来匹配输入(通常可以使用管道从另一个程序输入,或者重定向于文本文件)的正则表达式,替换是指插入某些文本并用其代替那些与模式相匹配的文本。标志是用来控制替换行为的单个字符。最常用的标志是 g(将替换应用于所有匹配模式的非重叠实例,而不仅仅是第一个匹配项)。
实际上,模式和替换可以是各种各样的内容,并且它们之间不需要像在 tr 命令中那样具有 1:1 的关系。 清单 7. sed 命令
sed -e s/pattern/replacement/flags
|
最简单的模式是一个或多个字符组成的字符串。如清单 8 所示,例如将单词 one 替换为单词 another。 清单 8. 最简单的正则表达式
chrish@dhcp3 [334]$ echo "Replace one word" | sed -e s/one/another/
Replace another word
|
可以使用方括号将一个或多个字符括起来,以创建一个集合,该集合中的任何字符都可以匹配。如清单 9 所示,让我们将所有的元音字母替换为下划线。 清单 9. 匹配集合中的任何字符
chrish@dhcp3 [338]$ echo "This is a test" | sed -e s/[aeiouy]/_/g
Th_s _s _ t_st
|
请注意,示例中使用了 g 标志,以便将模式/替换应用于所有的匹配项,而不仅仅是第一个匹配项。
sed 命令也可以理解 tr 命令所支持的那些命名字符类,POSIX 对这些字符类进行了定义,但是本文中的语法稍有不同。清单 10 显示了如何替换任何空白字符(制表符、空格等等): 清单 10. 根据命名字符类匹配内容
chrish@dhcp3 [345]$ echo -e 'hello\tthere'
hello there
chrish@dhcp3 [346]$ echo -e 'hello\tthere' | sed -e 's/[[:space:]]/, /'
hello, there
3/6 首页 上一页 1 2 3 4 5 6 下一页 尾页 |
如果您需转载 使用UNIX命令进行文本处理cat 和 echo,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
|