
echo "hello:world"|tr -c 'a-zA-Z' '\n'
用括号是错误的。
使用预定义的字符集才用括号, 而且是[:alnum:]
tr 命令定义:从标准输入删除或替换字符,并将结果写入标准输出。根据定义:(1)tr命令并不能对文件内容进行直接处理,所以仅tr命令不能修改文件内容;(2)文件内容要用tr处理,就需要作为tr的标准输入。你的命令里用的echo |或者 <或者 cat |都是这个作用,就是把文件内容输出到标准输出并作为tr的标准输入,所以tr处理的仅仅是标准输出上的内容,并不是文件本身,所以文件内容不会改变;(3)tr处理后的内容是“写入标准输出”的,并没有写入源文件,所以需要其他命令把输出再写到某个文件,如输出重定向符>,可以把输出到标准输出上的内容重定向输出到某个文件,如“cat qwer | tr [a-z] [A-Z] >qwer2.txt”
请你看一下tr的manual
man tr
NAME
tr - translate or delete characters
SYNOPSIS
tr [OPTION]... SET1 [SET2]
其中有一句
SET2 is extended to length of SET1 by repeating its last character as necessary.
当序列2比序列1短时,序列2会重复最后一个字符,使得两个序列字数相同。
所以,你的实验,其实是这样的:
echo "HELLO WORLD" | tr 'A-Z' 'AahH'
等效于:
echo "HELLO WORLD" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'AahHHHHHHHHHHHHHHHHHHHHHHH'字符一对一替换如下:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
AahHHHHHHHHHHHHHHHHHHHHHHH
替换结果:
HHHHH HHHHH
#############################################
echo "HELLO WORLD" | tr 'A-Z' 'AahH}-'
ABCDEFGHIJKLMNOPQRSTUVWXYZ
AahH}---------------------
替换结果:
-}--- ----H
##############################################
echo "HELLO WORLD" | tr 'A-Z' 'a-'
ABCDEFGHIJKLMNOPQRSTUVWXYZ
a-------------------------
替换结果:
----- -----
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)