本文为转载
作者:数洞
来源:CSDN
原文:https://blog.csdn.net/qixizhuang/article/details/77926455
用tr进行转换
-
tr
可以对来自标准输入的内容进行字符替换、字符删除以及重复字符压缩。它可以将一组字符变成另一组字符,因而通常也被称为转换(translate)命令。 -
tr
只能通过stdin,而无法通过命令行参数来接受输入,其调用格式如下:
tr [options] set1 set2
将来自stdin的输入字符从set1
映射到set2
,然后将输出写入stdout。set1
和set2
是字符类或字符集。如果set1
长度大于set2
,那么set2
会不断重复其最后一个字符;反之,则set2
多余的不分会全部被忽略。 -
将输入字符由大写转换成小写
$ echo "HELLO WHO IS THIS" | tr 'A-Z' 'a-z'
-
通过在
tr
中使用集合的概念,我们可以轻松地将字符从一个集合映射到另一个集合中。我们可以据此进行数字加密和解密
$ echo 12345 | tr '0-9' '9876543210'
$ echo 87654 | tr '9876543210' '0-9'
ROT13是一个著名的加密算法,在ROT13算法中,文本加密和解密都使用同一个函数。
$ echo "tr came, tr saw, tr conquered." | tr 'a-zA-Z' 'n-za-mN-ZA-M'
-
tr
还可以用来将制表符转换成空格:
tr '\t' ' ' < file.txt
-
用
tr
删除字符
$ cat file.txt | tr -d '[set1]'
$ echo "Hello 123 world 456" | tr -d '0-9'
-
字符集补集
$ echo hello 1 char 2 next 4 | tr -d -c '0-9 \n'
上述命令中,补集包含了除数字、空格字符和换行字符之外的所有字符。因为制定了-d选项,所以这些字符全都被删除。 -
用tr压缩字符
$ echo "GNU is not UNIX. Recursive right ?" | tr -s ' '
tr
的-s
选项可以压缩输入中重复的字符。 -
字符类。
tr
可以像使用集合一样使用各种不同的字符类,这些字符类如下所示:
alnum
:字母和数字
alpha
:字母
cntrl
:控制字符
digit
:数字
graph
:图形字符
lower
:小写字母
print
:可打印字符
punct
:标点符号
space
:空白字符
upper
:大写字母
xdigit
:十六进制字符
tr '[:lower:]' '[:upper:]'
:小写全部转换为大写
检验和与核实
-
检验和(checksum)程序用来从文件中生成校验和密钥,然后利用这个校验和密钥核实文件的完整性。
-
最知名且使用最为广泛的校验和技术是md5sum和SHA-1,它们对文件内容使用相应的算法来生成校验和。
2.1. md5sum
md5sum file1 file2 file3 ..
#计算文件校验和
md5sum filename > file_sum.md5
#将输出的校验和重定向到一个文件,然后用此文件核实数据的完整性
md5sum -c file_sum.md5
#输出校验和是否匹配
md5sum -c *.md5
#检查所有文件的校验和2.2. SHA-1从给定的输入文件中生成一个长度为40个字符的十六进制串。用来计算SHA-1串的命令是
sha1sum
,用法和md5sum
非常相似。 -
对目录进行校验。校验和是从文件中计算得来的,对目录计算校验和意味着我们需要对目录中的所有文件以递归的方式进行计算。
这可以通过命令md5deep
或sha1deep
来实现。首先需要安装md5deep软件包以确保能找到这些命令。$ md5deep -rl directory_path > directory.md5 # `-r`使用递归的方式 # `-l`使用相对路径。默认情况下,`md5deep`会输出文件的绝对路径。
或者结合find来递归计算校验和:
$ find directory_path -type -f -print0 | xargs -0 md5sum >> directory.md5
$ md5sum -c directory.md5
加密工具与散列
-
加密技术主要用于防止数据遭受未经授权的访问。常用的加密算法有crypt、gpg、base64、md5sum、sha1sum以及openssl。
-
crypt是一个简单的加密工具,从stdin接受一个文件以及口令作为输入,然后将加密数据输出到stdout,因此要对输入输出文件使用重定向。
$ crypt <input_file >output_file
Enter passphrase:
#crypt要求输入一个口令,我们也可以通过命令行参数来提供口令。
$ crypt PASSPHRASE <input_file >encrypted_file
如果需要解密文件,可以使用:
$ crypt PASSPHRASE -d <encrypted_file >output_file
-
gpg(GNU隐私保护)是一种应用广泛的工具,它使用加密技术来保护文件,以确保数据在送达目的地之前无法被读取。
$ gpg -c filename
#加密
$ gpg filename.gpg
#解密 -
Base64是一组相似的编码方案,它将ASCII字符转换成以64为基数的形式(radix-64 representation),以可读的ASCII字符串来描述二进制数据。base64命令可以用来编码/解码Base64字符串。
$ base64 filename > outputfile
#将文件编码为Base64格式
或者
$ cat file | base64 > outputfile
#base64可以从stdin中进行读取
$ base64 -d file >outputfile
#解码Base64数据
或者
$ cat base64_file | base64 -d > outputfile
-
md5sum
和sha1sum
都是单向散列算法,均无法逆推出原始数据,他们通常用于验证数据完整性或为特定数据生成唯一的密钥。 -
shadow-like散列(salt散列)。
在Linux中,用户密码是以散列值形式存储在文件/etc/shadow中的。
$ opensslpasswd -1 -salt SALT_STRING PASSWORD
排序、唯一与重复
-
sort命令能够帮助我们对文本文件和stdin进行排序操作,它通常会配合其他命令来生成所需要的输出。
-
uniq是一个经常与sort一同使用的命令。它的作用是从文本或stdin中提取唯一(或重复)的行。
-
对一组文件进行排序
$ sort file1.txt file2.txt > sorted.txt
$ sort file1.txt file2.txt -o sorted.txt
-
按照数字顺序进行排序:
$ sort -n file.txt
-
按照逆序进行排序:
$ sort -r file.txt
-
按照月份进行排序:
$ sort -M months.txt
-
合并两个已排序过的文件:
$ sort -m sorted1 sorted2
-
找出已排序文件中不重复的行:
$ sort file1.txt file2.txt | uniq
-
检查文件是否已经排序过:
#!/bin/bash
# 功能描述:排序
sort -C filename ;
if [ $? -eq 0 ]; then
echo Sorted;
else
echo Unsorted;
fi
-
依据键或列进行排序:
sort -k 2 data.txt
sort -k 1,2 data.txt
- 为了使sort的输出与以
\0
作为终止符的xargs命令相兼容,需如此:sort -z data.txt | xargs -0
-
sort -bd unsorted.txt
,其中-b
用于忽略文件中的前导空白行,-d
用于指明以字典序进行排序。
-
uniq
命令通过消除重复内容,从给定输入中(stdin或命令行参数文件)找出唯一的行。它也可以用来找出输入中出现的重复行。-
uniq
只能作用于排过序的数据输入,因此,uniq
要么使用管道,要么将排过序的文件作为输入,与sort
命令结合使用。 -
uniq sorted.txt
#打印唯一行 -
uniq -u sorted.txt
#打印没有重复出现过的行 -
sort unsorted.txt | uniq -u
#同上 -
sort unsorted.txt | uniq -c
#统计各行在文件中出现的次数。 -
sort unsorted.txt | uniq -d
#找出文件中重复的行。 -
sort data.txt | uniq -s 2 -w 2
#-s指定可以跳过前n个字符,-w指定用于比较的最大字符数。 -
uniq -z file.txt
#用uniq命令生成包含0值字节终止符的输出。 uniq -z file.txt | xargs -0 rm
-
临时文件命名与随机数
# 创建临时文件
$ filename=`mktemp`
$ echo $filename
# 创建临时目录
$ dirname=`mktemp -d`
$ echo $dirname
# 如果仅仅是想生成文件名,又不希望创建实际的文件或目录,如下:
$ tmpfile=`mktemp -u`
$ echo $tmpfile
# 根据母版创建临时文件名
$ mktemp test.XXX
网友评论