shell中文件常用命令
1. diff
2. patch
3. cut
4. sort
5. uniq
6. tr
7. test
8. && 、 ||
命令操作
diff
作用是用来进行文件内容比较
有一个命令是 “vimdiff filename1 filename2” 可以用来进行两个文件的对比并且标记出不同的内容展示
diff命令用法:
diff [options] files/directorys
这里出现的信息解释一下:
1a2 --> 1表示file1 中的行,a表示添加 ,如果是d表示删除,c表示更改,后买面的数字2表示file2中的行;
“>”表示第二个文件中的内容, “<” 表示第一个文件中的内容;
diff命令比较两个文件,写在后面的文件会作为标准来对比前面的文件。
常用参数:
参数 | 说明 |
---|---|
-b | 忽略空格 |
-B | 忽略空行 |
-i | 忽略大小写 |
-c | 显示文件所有内容并标示不同 |
-r | 对比目录 |
-u | 合并输出 |
- -b
不加-b参数diff命令会统计两个文件中的内容空格的区别,加上-b就会自动忽略
- -B
- -i
- -c
- -r
对比两个目录,会详细列出,目录中独有的文件
- -u
对比两个文件,以file2为标准对比file1,
patch
首先要安装命令包
命令操作:patch 原文件 补丁文件
补丁文件是通过diff命令来生成的,生成的补丁文件
生成的补丁文件通过patch命令来进行打补丁,使file1文件更新为file2的内容
因为直接使用patch命令会将源文件直接更新为新文件,旧文件就被覆盖 了,如果想要旧的文件存在的话,使用参数:-b ,备份原文件
备份出的文件生成的后缀是 “.orig”,就是源文件
cut
cut 是一个数据的截取命令,在一个文件中,如果想要截取一部分的数据出来看,可以使用cut命令
参数 | 说明 |
---|---|
-d | 指定分隔符 |
-f | 指定显示的列 5=第五列;3,5=3和5列;3-5=3到5列;5-=第五列以后;-5=到第五列 |
-c | 指定截取的字符(数字用法同-f) |
例:cut -d / -f 1,4 passwd,-d指定“/”为分隔符,就是一个分隔符为一列
-d 指定“:”为分隔符
如果需要指定空格为分隔符:cut -d ’ ’ -f 2 passwd,单引号中间打空格表示
-c是显示字符,指定需要显示的第几个到第几个字符即可
sort
sort命令的主要作用是排序
参数 | 说明 |
---|---|
-n | 纯数字排序 |
-r | 倒叙 |
-u | 去掉重复 |
-o | 输出到指定文件 |
-t | 指定分隔符 |
-k | 指定排序的列 |
建立文件,内容如下,对于无序的文件我们需要让其按顺序排列的话
sort -n file1,排序纯数字文件
sort -nr file1 ,倒叙排序纯数字文件
sort -nru file1 ,倒叙排序纯数字文件并去掉重复内容
sort -nru file1 -o file.sort,倒叙排序纯数字文件并去掉重复内容,输出内容到file.sort
-t 和 -k 会同时使用,如果文件中存在很多列,可以选中分隔符然后指定需要排序的列进行操作
uniq
参数 | 说明 |
---|---|
-c | 合并重复并统计重复个数 |
-d | 显示重复的行 |
-u | 显示唯一的行 |
建立如下文件
uniq需要配合其他命令使用,如sort命令
sort -n file1 | uniq -c,排序file1 并且合并重复的内容标记个数
sort -n file1 | uniq -d,排序file1显示出重复行的内容
sort -n file1 | uniq -u,排序file1显示出独立行的内容
tr
tr命令主要用途更改文件内容的大小写
tr ‘a-z’ ‘A-Z’ | 小写转大写 |
---|---|
tr ‘A-Z’ 'a-z’ | 大写转小写 |
建立文件如下
cat file1 | tr ‘a-z’ ‘A-Z’ > file3,查看file1文件,并且将文件的小写全部转换为大写再输出到file3文件中
&& 、 ||
&& 符合条件作动作
|| 不符合条件作动作
test
test命令是对比命令,可对数字、条件关系、文件等进行对比判定
test = [ ] ,[ ] 就相当于test命令
test " $a " = " $b " = [ " $a " = " $b " ]
$a表示a的值, $b表示b的值,对比a和b,如果相等输出yes,否则输出no
可以看到两个值都为1,所以输出为yes
test数字对比 | 说明 |
---|---|
= | 是否相等 |
!= | 是否不等 |
-eq | 等于 |
-ne | 不等于 |
-le | 小于等于 |
-lt | 小于 |
-ge | 大于等于 |
-gt | 大于 |
-
-eq 等于
-
-lt ,设置b的值为2,测试a是否小于b
-
-ge,设置a的值也为2,测试a是否大于等于b
test的条件关系
-a ,并且
例如要判定a的值是否大于0小于10
-o ,或者
测试要判定a的值是否小于0或大于10
test对空的判定
-n ,nozero 判定内容不为空
测试判定不存在的值c,判定c不为空
-z ,zero 判定内容为空
测试判定值a,a=2,所以判定结果是no
test对于文件的判定
参数 | 说明 |
---|---|
-ef | 文件节点号是否一致(硬链) |
-nt | 文件1是不是比文件2新 |
-ot | 文件1是不是比文件2老 |
-d | 目录 |
-S | 套结字 |
L | 软连接 |
-e | 存在 |
-f | 普通文件 |
-b | 块设备 |
-c | 字符设备 |
-
-ef
测试两个文件是否互为硬链接,建立file1 ,为file1建立链接testfile,硬链接两个文件或目录的id是一致的
[ “file1” -ef “testfile” ] && echo yes || echo no ,对比两个文件输出为yes
-
-d / -f
分别测试 /mnt 和 file1 ,/mnt是目录,file1是文件
-e 是否存在
-
-L,查看是否为软连接
-
-b 判定是否是块设备
/dev/sda1是系统里的磁盘设备,使用-b对它进行判定
-
-c 字符设备
/dev/pts/0 是当前shell 的字符设备