shell 学习笔记 常用命令 tr md5sum

摘自 Linux Shell 脚本攻略 第二章 命令之乐

tr

tr可以对 来自标准输入的内容进行字符替换、字符删除以及重复字符压缩

字符的大小写转换

$ echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
hello who is this

对字符进行加密

tr命令可以用来加密。ROT13是一个著名的加密算法。在ROT13算法中,字符会被移动13
个位置,因此文本加密和解密都使用同一个函数

$ echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
ge pnzr, ge fnj, ge pbadhrerq.

删除字符

$ echo "Hello 123 world 456" | tr -d '0-9'
Hello  world 

字符组补集

tr -c [set1] [set2]
如果只给出了set1,那么tr会删除所有不在set1中的字符。如果也给出了set2,tr会将不 在set1中的字符转换成set2中的字符。如果使用了-c选项,set1和set2必须都给出。如果-c 与-d选项同时出现,你只能使用set1,其他所有的字符都会被删除

$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
 1  2  4

-d -c 同时使用时 只保留给定set字符中的字符

$ echo hello 1 char 2 next 4 | tr -c '0-9' ' '
      1      2      4 

只使用-c 时 将非字符集替换

用tr压缩字符

$ echo "GNU is       not     UNIX. Recursive   right ?" |tr -s ' ' 
GNU is not UNIX. Recursive right ?

删除字符中重复的空格

tr的灵活运用

sum.txt

$ cat sum.txt 
1
2
3
4
5

计算sum文件中所有数的和

$ cat sum.txt |echo $[ `tr '\n' '+'` 0]
15

tr ‘\n’ ‘+’ 将换行替换成+ 得到表达式 1+2+3+4+5+
再将其与0 拼接 得到表达式 1+2+3+4+5+0
最后运行该表达式得到总数

另外一个例子
test.txt

$ cat test.txt 
first 1
second 2
third 3

计算test中数字的总和

$ cat test.txt |tr -d [a-z]|echo "total $[ `tr ' ' '+'`]"
total 6

利用tr的-d选项删除文件中的字母,然后将空格替换成+

可以使用的字符类

  • alnum:字母和数字。
  • alpha:字母。
  • cntrl:控制(非打印)字符。  digit:数字。
  • graph:图形字符。
  • lower:小写字母。
  • print:可打印字符。
  • punct:标点符号。
  • space:空白字符。
  • upper:大写字母。
  • xdigit:十六进制字符。
$ echo 'coco is handsome 123 !' |tr -d [:alnum:]
    !

md5sum

计算文件的md5sum

coco.log

$ cat coco.log 
coco is handsome
$ md5sum coco.log 
7fdc4a7ed1e76c6e1e1ac2ae24fd2068  coco.log

保存校验信息

$ md5sum coco.log > coco.md5 
$ md5sum  -c coco.md5 
coco.log: OK # 校验 ok
$ vi coco.log
$ cat coco.log 
coco is handsome !
$ md5sum  -c coco.md5 
coco.log: FAILED # 原文件中添加! 校验 fail
md5sum: WARNING: 1 computed checksum did NOT match

递归校验

md5deep或sha1deep命令可以遍历目录树,计算其中所有文件的校验和。你的系统中可能 并没有安装这两个程序。可以使用apt-get或yum来安装md5deep软件包

$ md5deep -rl directory_path > directory.md5
# -r使用递归遍历
# -l使用相对路径。默认情况下,md5deep会输出文件的绝对路径

也可以结合find 命令进行递归校验

$ find directory_path -type f –print0 | xargs -0 md5sum >> directory.md5

md5与SHA-1都是单向散列算法,均无法逆推出原始数据。两者通常用于为特定数据生成 唯一的密钥

上一篇:【NOIP2009】【codevs1174】靶形数独


下一篇:线性代数之 矩阵求导(4)矩阵微分,迹与求导