0028. shell命令--tr

目录

28. shell命令--tr

功能说明

语法格式

选项说明

实践操作


28. shell命令--tr

功能说明

        tr 是一个在 Unix 和 Linux 系统中非常有用的命令,它用于从标准输入中替换或删除字符,并将结果写入标准输出。tr 命令主要用于处理文本数据,特别是进行字符替换和删除操作。

        tr 命令来自英文单词 transform 的缩写,中文译为“转换”,其功能是转换字符。tr 命令是一款批量字符转换、压缩、删除的文本工具,但仅能从标准输入中读取文本内容,需要与管道符或输入重定向操作符搭配使用。

        tr 命令 可以对来自标准输入的字符进行替换、压缩和删除。它可以将一组字符变成另一组字符,经常用来编写优美的单行命令,作用很强大。

语法格式

SYNOPSIS
       tr [OPTION]... SET1 [SET2]

选项说明

  • -c, --complement:反选设定字符。也就是符合 SET1 的部份不做处理,不符合的剩余部份才进行转换,取代所有不属于第一字符集的字符
  • -d, --delete:删除指令字符
  • -s, --squeeze-repeats:缩减连续重复的字符成指定的单个字符
  • -t, --truncate-set1:削减 SET1 指定范围,使之与 SET2 设定长度相等(这通常是默认行为,但 -t 选项可以用于明确这一点)。
  • --help:显示程序用法信息
  • --version:显示程序本身的版本信息

字符集合的范围:

\NNN 八进制值的字符 NNN (1 to 3 为八进制值的字符)
\\ 反斜杠
\a Ctrl-G 铃声
\b Ctrl-H 退格符
\f Ctrl-L 走行换页
\n Ctrl-J 新行
\r Ctrl-M 回车
\t Ctrl-I tab键
\v Ctrl-X 水平制表符
CHAR1-CHAR2 :字符范围从 CHAR1 到 CHAR2 的指定,范围的指定以 ASCII 码的次序为基础,只能由小到大,不能由大到小。
[CHAR*] :这是 SET2 专用的设定,功能是重复指定的字符到与 SET1 相同长度为止
[CHAR*REPEAT] :这也是 SET2 专用的设定,功能是重复指定的字符到设定的 REPEAT 次数为止(REPEAT 的数字采 8 进位制计算,以 0 为开始)
[:alnum:] :所有字母字符与数字
[:alpha:] :所有字母字符
[:blank:] :所有水平空格
[:cntrl:] :所有控制字符
[:digit:] :所有数字
[:graph:] :所有可打印的字符(不包含空格符)
[:lower:] :所有小写字母
[:print:] :所有可打印的字符(包含空格符)
[:punct:] :所有标点字符
[:space:] :所有水平与垂直空格符
[:upper:] :所有大写字母
[:xdigit:] :所有 16 进位制的数字
[=CHAR=] :所有符合指定的字符(等号里的 CHAR,代表你可自订的字符)

实践操作

1. 字符替换
1.1 字符替换1:将输入中的所有小写字母 'a' 替换为 'x'
echo {a..d}{a..d}
echo {a..d}{a..d} |tr 'a' 'x'    
echo {a..d}{a..d} |tr 'a' 'X'    #将输入中的所有小写字母 'a' 替换为 'X'
echo {a..d}{a..d} |tr 'a' 'MineGi'    #实验一下
echo {a..d}{a..d} |tr 'ab' 'MG'    #实验一下

1.2 字符替换2:将输入中的所有小写字母替换为大写字母
echo {a..d}{a..d} 
echo {a..d}{a..d} |tr 'a-z' 'A-Z'
echo {a..d}{a..d} |tr '[:lower:]' '[:upper:]'
echo "hello world" |tr '[:lower:]' '[:upper:]'

1.3 空格替换:转换其它控制字符
echo {A..H}
echo {1..8}.txt
echo {A..H} |tr ' ' '\n'    #:\n新行
echo {1..8}.txt |tr ' ' '\n'
echo {a..c}{0..9} |tr ' ' '\v'
echo {a..c}{0..9} |tr ' ' '\a'    #\a:响铃
echo {a..c}{0..9} |tr ' ' '\b'    #\b:退格符
echo {a..c}{0..9} |tr ' ' '\r'    #\r:回车
echo {a..c}{0..9} |tr ' ' '\t'    #\t:tab键
echo {a..c}{0..9} |tr ' ' '\v'    #\v: 水平制表符
echo {a..c}{0..9} |tr ' ' '\v' |less

2. 字符删除
2.1 删除输入中的所有数字
echo {a..c}{0..9} |tr ' ' '\a' 
echo {a..c}{0..9} |tr ' ' '\a' |tr -d '0-9'

2.2 删除输入中的所有字母
echo {a..c}{0..9} |tr ' ' '\a' |tr -d 'a-z'
echo {a..z} {A..Z} 
echo {a..z} {A..Z} {1..9}
echo {a..z} {A..Z} {1..9} |tr ' ' '\a'
echo {a..z} {A..Z} {1..9} |tr ' ' '\a' |tr -d 'a-z'    #还是有字母
echo {a..z} {A..Z} {1..9} |tr ' ' '\a' |tr -d 'a-Z'    #报错,那咋整
echo {a..z} {A..Z} {1..9} |tr ' ' '\a' |tr -d  'a-z' 'A-Z'    #还是报错
echo {a..z} {A..Z} {1..9} |tr ' ' '\a' |tr -d '0-9'    #啊哦,把数字删了
echo {a..z} {A..Z} {1..9} |tr ' ' '\a' |tr -cd '0-9'    #那取反好了
echo {a..z} {A..Z} {1..9} |tr ' ' '\a' |tr -cd '0-9 \n'    #加个换行
echo {a..z} {A..Z} {1..9} |tr ' ' '\a' |tr -d [:alpha:]    #这样也是可以的

3. 字符压缩
echo "hello    world"
echo "hello    world" | tr -s ' '
echo aaabbbccc |tr -s [:alpha:]
echo {a..c}{a..c}{a..c} |tr ' ' '\a'
echo {a..c}{a..c}{a..c} |tr ' ' '\a' |tr -s [:alpha:]    #压缩字母
echo "thissss is      a text linnnnnnne." | tr -s ' sn'    #压缩空格,s和n

4. 数字相加
4.1 方法1
echo {1..9} | xargs -n1 | echo $[ $(tr '\n' '+') 0 ]    #巧妙使用tr做数字相加操作,先看下结果
[ 1+2 ]    #先了解数字相加
echo $[ 1+2 ]    #将数字相加的结果打印出来
echo $[ 1+2+3+4+5+6+7+8+9 ]    #这个是手写的,比较麻烦
echo {1..9}    #先打印1到9这个数字
echo {1..9} |xargs -n1    #使用xargs进行换行
echo {1..9} |tr ' ' '\n'    #使用我们刚学的也能达到效果
echo {1..9} |xargs -n1 |tr '\n' '+'    #将换行换成+号
echo {1..9} |xargs -n1 |echo $(tr '\n' '+')    #打印一下,就差结尾+号了
echo {1..9} |xargs -n1 |echo [$(tr '\n' '+')0 ]    #填一个0就行了
echo {1..9} |xargs -n1 |echo $[$(tr '\n' '+')0 ]    #再次加个$符

4.2 方法2
echo {1..9} |tr '\ ' '+'    #使用我们刚学的就能得到1+2..9
echo $(echo {1..9} |tr '\ ' '+')    #$()的用法
[ $(echo {1..9} |tr '\ ' '+') ]   #数字相加
echo $[ $(echo {1..9} |tr '\ ' '+') ]  #打印结果 

5. 删除Windows文件"回车"造成的'^M'字符
a.在Windows上新建文本文件windows.txt,然后输入几行内容(有回车就行)
b.直接上传或通过xftp上传到Linux系统里
注意:
    直接上传需要Linux安装 Lrzsz 这个软件包
    rpm -qa lrzsz    #查看是否有这个包
    #yum install -y lrzsz    #若没有,CentOS上使用这条命令安装(需要联网和有yum源)
c.查看'^M'字符
cat windows.txt    #直接查看不出来
cat -A windows.txt    #使用-A选项
d.删除该字符
tr -s "\r" "\n" <windows.txt |cat -A    #查看有没有效果
cat windows.txt |tr -d "\r" >newfile1.txt    #将处理过的内容写入新文件里
cat -A newfile1.txt
dos2unix -n windows.txt newfile2.txt    #当然也有专门的命令来干这个事情,dos2unix命令后面再细节
cat -A newfile2.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MineGi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值