求问linux中的tr命令

求问linux中的tr命令,第1张

从一个正常人的角度来说,这个命令应该这么用啊:

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-------------------------

替换结果:

----- -----


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7303269.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-04
下一篇2023-04-04

发表评论

登录后才能评论

评论列表(0条)

    保存