Bash Shell大小写字母转换

Bash Shell大小写字母转换,你需要消除文本流中的字母大小写差异。

解决方案

可以使用 tr 命令并指定字符区间,将所有的大写字母(A-Z)转换成小写字母(a-z):

tr 'A-Z' 'a-z' <be.fore >af.ter

tr 还有一种特别的语法,可用于指定大小写字母转换的区间:

tr '[:upper:]' '[:lower:]' <be.fore >af.ter

有些版本的 tr 支持当前语言环境的对照顺序(collating sequence),A-Z 不一定总是当前语言环境中的大写字母集合。尽可能使用 [:lower:][:upper:] 来避开这种问题,不过如此一来,就无法使用子范围(如 N-Z 和 a-m)了。

讨论

虽然 tr 不支持正则表达式,但支持字符区间。确保两个参数包含相同数量的字符即可。如果第二个参数长度较短,那么其最后一个字符会不断重复,直到匹配第一个参数的长度。如果第一个参数较短,第二个参数则会被截断,以匹配第一个参数的长度。

以下使用简单的替换加密算法对一段文本消息进行了简单的编码,这种算法将每个字符偏移 13 个位置(ROT13)。ROT13 有一个值得注意的地方:相同的过程既可以用于文本加密,也可以用于文本解密。

$ cat /tmp/joke
Q: Why did the chicken cross the road?
A: To get to the other side.

$ tr 'A-Za-z' 'N-ZA-Mn-za-m' < /tmp/joke
D: Jul qvq gur puvpxra pebff gur ebnq?
N: Gb trg gb gur bgure fvqr.

$ tr 'A-Za-z' 'N-ZA-Mn-za-m' < /tmp/joke | tr 'A-Za-z' 'N-ZA-Mn-za-m'
Q: Why did the chicken cross the road?
A: To get to the other side.

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!