撇嘴看天空

导航

tr 压缩命令

tr:
    tr [options] [SET1] [SET2]
    处理输入信息的(转换和删除字符串的,后换前);
    默认是键盘输入,所以你输入tr,跟cat同理,都是等待键盘的输入的;所以tr和cat也可能利用<(输入重定向来)来接收文件的信息;
    参数:
        -t:截断,使得SET1的长度和SET2的长度相同;
            tr -t 123 ab;后面只有2个所以会截断到前面2个,3不做替换;
        -d:指定删
            tr -d 'a-z' < /etc/fstab;
                把所有小写的都删了;
            tr -dc 'a'
                会除了a都算,连按的回车也算,所以结束输入需要用ctrl+d;’a\n‘这样是保留a和回车; 
        -s:把连续出现的自动内容压缩成一个;
        -c:取反;
            tr -sc 'a';
                就是除了a都去重;  
        tr -s " " :
            压缩了之后再用:代替空格;
            这种方法在日后的操作中非常多用,当有很多分割符的时候可以用tr来改成一个来处理;   
1.1.1tr的映射
tr是映射而不是替换,是因为两个结果集替换的时候符号位置是一一对应的。如果SET1比SET2短,则SET2多余的部分会被忽略,如果SET1比SET2长,POSIX认为这是不合理的,但也能执行,只不过结果有些意料之外,见下文。例如下面的例子,因为SET1中只有一个符号"\n",于是替换时SET2中的Y被忽略。
SET1<SET2
[root@centos7 ~]# ls /app |tr '\n' "XY"
192.168.241.0.logXbackup.shXf1Xhaha.logXhttpd.logXi_f.shXissueXnohup.outXscan_ip.shXsysconfig12018-08-03.tar.xzX[root@centos7 ~]#
SET1>SET2
[root@centos7 ~]# echo abcabcdfgqwedfg|tr 'abc' 'xy'
xyyxyydfgqwedfg
以上分析来看,a—>x和b,c—>y,并非是你所想的abc一个整体对应xy
使用-t截断
[root@centos7 ~]# echo abcabcdfgqwedfgafb|tr -t 'abc' 'xy'
xycxycdfgqwedfgxfy
这样就是a—>x,b—>y,而c作为截断在外的
所以说tr不是以某一个字符串与某一个字符串的替换,而是字符之间的映射;
实现简单的加密和解密
[root@centos7 ~]# echo "12345" |tr "0-9" "9876543210"               #加密
87654
[root@centos7 ~]# echo "87654" |tr "0-9" "9876543210"                #解密
12345
tr的SET1到SET2的映射就是作为秘钥了,只要有一套自己的秘钥,那么就可以简单实现加解密了;
1.1.2tr的压缩
-s选项是用来压缩,压缩指定连续的字符一个或者多个;在文本处理中与cut配合来取出某一列是相当快捷,简单的
实例知道磁盘的使用率
[root@centos7 ~]# df -h | tr -s " "
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 50G 7.5G 43G 15% /
devtmpfs 485M 0 485M 0% /dev
tmpfs 500M 0 500M 0% /dev/shm
tmpfs 500M 52M 449M 11% /run
tmpfs 500M 0 500M 0% /sys/fs/cgroup
/dev/sda3 20G 33M 20G 1% /app
/dev/sda1 1014M 158M 857M 16% /boot
tmpfs 100M 36K 100M 1% /run/user/0
/dev/sr0 8.1G 8.1G 0 100% /run/media/root/CentOS 7 x86_64
#不指定SET2,仅仅是压缩,也可压缩替换一起使用
[root@centos7 ~]# df -h | tr -s " " ":"
Filesystem:Size:Used:Avail:Use%:Mounted:on
/dev/sda2:50G:7.5G:43G:15%:/
devtmpfs:485M:0:485M:0%:/dev
tmpfs:500M:0:500M:0%:/dev/shm
tmpfs:500M:52M:449M:11%:/run
tmpfs:500M:0:500M:0%:/sys/fs/cgroup
/dev/sda3:20G:33M:20G:1%:/app
/dev/sda1:1014M:158M:857M:16%:/boot
tmpfs:100M:36K:100M:1%:/run/user/0
/dev/sr0:8.1G:8.1G:0:100%:/run/media/root/CentOS:7:x86_64
#最终配合cut取出
[root@centos7 ~]# df -h | tr -s " " ":"|cut -d: -f5
Use%
15%
0%
0%
11%
0%
1%
16%
1%
100%
1.1.3tr的删除与补集
如果SET2指定多个字符,将只取最后一个字符作为替换字符
[root@centos7 ~]# echo dasdadad|tr -c "d\n" "ac" 
dccdcdcd
#只对c生效
一般-d与-c连用,如实例从随机数中获取只要是随机数字字母的密码
9J8XZGk3[root@centos7 ~]# openssl rand -base64 50|tr -dc "[0-9][a-z][A-Z]\n"|head -c8
ZYS1uwNB[root@centos7 ~]# openssl rand -base64 50|tr -dc "[0-9][a-z][A-Z]"|head -c8 
LODdrtL1[root@centos7 ~]# openssl rand -base64 50|tr -dc "[0-9][a-z][A-Z]"|head -c8
cc0PZ9tO[root@centos7 ~]#

posted on 2019-06-13 15:48  撇嘴看天空  阅读(584)  评论(0编辑  收藏  举报