Bash Shell字符转换,你需要将文本中出现的某个字符全部转换成另一个字符。
解决方案
可以使用 tr 命令。例如:
tr ';' ',' <be.fore >af.ter
讨论
就其最简单的形式而言,tr 命令用第二个参数的第 1 个(仅此)字符替换第一个参数的第 1 个(仅此)字符。
在上述示例中,我们将输入重定向为文件 be.fore
,将输出重定向至文件 af.ter
,将输入文件中所有的分号替换成了逗号。
为什么要在分号和逗号两边使用单引号呢?这是因为分号在 bash 中有特殊含义,如果不用引号,那么 bash 会将命令拆成两个,这肯定要出错。逗号倒是没有特殊含义,将它放入引号纯粹出于习惯,免得万一忘记什么。坚持使用引号会更安全,这样就永远不会漏写了。
如果使用多个待转换的字符作为第一个参数,要转换成的字符作为第二个参数,那么 tr 命令就会一次性执行多个字符转换。记住,这种转换是一对一进行的。例如:
tr ';:.!?' ',' <other.punct >commas.all
该命令会将分号、冒号、句号、惊叹号、问号全部转换成逗号。因为第二个参数比第一个参数短,所以不断重复第二个参数的最后一个字符(这个例子中就只有一个)来匹配第一个参数的长度,这样一来,字符就能在转换时一一对应了。
sed 命令也能完成这种转换,只不过语法有点麻烦。tr 命令没有那么厉害,因为它无法使用正则表达式,但 tr 有一些特别的字符区间语法,非常有用。
酷客网相关文章:
评论前必须登录!
注册