1、sort命令
-
以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序
-
比较原则:从首字符向后,依次按照ASCII码进行比较,最后将他们按升序输出
1.1、语法格式
sort [选项] 参数
cat 文件 | sort 选项
1.2、常用选项:
不加选项,根据首字母向后排序
参数 | 解释 |
---|---|
-n | numeriv-sort,按照数字进行排序 |
-r | reverse,反向排序 |
-u | 等同于uniq,表示相同的数据仅显示一行 |
-t | 指定字符分隔符,默认使用【Tab】键分割 |
-k | 指定排序字段 |
-o | <输出文件>:将排序后的结果转存至指定文件 |
-f | 忽略大小写,会将小写字母都转换为大写字母进行比较 |
-b | 忽略每行前面的空格 |
示例:
#-t ':' 以:为分隔符,-k 3 指定第三段排序 -n 从小到大排序
[root@localhost ~]# sort -t ':' -k 3 -n /etc/passwd
-----------------------------------------------------------------
#将var目录下文件,进行du -a以文件大小显示所有文件,再进按数字大小(-n),倒叙方式(-r),
保存到指定(-o) /opt/du.txt文件里
[root@localhost opt]# cd /var
[root@localhost var]# du -a | sort -nr -o /opt/du.txt
2、uniq命令
-
用于报告或忽略文件中连续的重复行,常与sort命令结合使用
2.1、语法格式
uniq [选项] 参数
cat 文件 | uniq 选项
只会删除连续重复的行
2.2、常用选项
选项 | 解释 | |
---|---|---|
-c | 进行计数,并删除文件中重复出现的行 | |
-d | 找出仅显示连续的重复行 | |
-u | 找出仅显示出现一次的行 |
示例:
[root@localhost ~]# sort -n test02 | uniq 先sort排序,再-c删除连续重复的行
3、tr命令
对标准输入的字符进行替换、压缩、删除
3.1、语法格式
tr [选项] 参数
3.2、常用选项
选项 | 解释 |
---|---|
-c | 保留字符集1的字符,其他字符(包括换行符\n)用字符集2替换 |
-d | delete,删除所有属于字符集1的字符 |
-s | 将重复出现的字符串压缩为一个字符串;用字符集2替换字符集1 |
-t | 字符集2替换字符集1,不加选项同结果 |
参数 | |
---|---|
字符集1 | 指定要转换或删除的原字符集。 |
字符集2 | 指定要转换成的目标字符集 |
提示:
echo -e "abc\ncba\nabab" | tr -c "ab" "0"
echo -c "xxxxxxxx\e"
----------------------------------------
除了这两种,其他echo都自带换行符
示例:
[root@localhost ~]# echo abc | tr 'a-z' 'A-Z'
ABC
[root@localhost ~]# echo abc | tr 'a' 'A'
Abc
[root@localhost ~]# echo '192.168.96.10' | tr '.' ' '
192 168 96 10
-------------------------------------------------------------------
#-c 保留字符集1,除了(ab,换行符)其他换成0
[root@localhost ~]# echo -e "abc\ncba\nabab" | tr -c "ab\n" "0"
ab0
0ba
abab
-c 保留字符集1,保留ab,包括换行符等其他字符都换成0
[root@localhost ~]# echo -e "abc\ncba\nabab" | tr -c "ab" "0"
ab000ba0abab0[root@localhost ~]#
--------------------------------------------------------------------
#-d 删除
[root@localhost ~]# echo hellow word | tr -d ' '
hellowword
[root@localhost ~]# echo hellow | tr -d 'lo'
hew
-------------------------------------------------------------------
[root@localhost ~]# echo ‘thisssss is a test linnnnne’ |tr -s 'sn'
‘this is a test line’
#-s 压缩并替换
[root@localhost ~]# echo ‘thisssss is a test linnnnne’ |tr -s 'sn' 'o'
‘thio io a teot lioe’
--------------------------------------------------------------------
grep -v "^$ 删除文件空行
cat 文件名 | tr -s "\n" 删除文件空行
--------------------------------------------------------------------
#tr -s 压缩 sed 替换末尾: ,并换行
[root@localhost ~]# echo -e "aa\n\n\n\n\n\nbb" |tr -s "\n" ':'|sed 's/:$/\n/'
aa:bb
#赋值给a,${a%:*} a为变量 %为固定格式,意思是从右往左匹配,(:*)指(到:)为止全部删除
[root@localhost ~]# a=$(echo -e "aa\n\n\n\n\n\nbb" |tr -s "\n" ":")
[root@localhost ~]# echo ${a%:*}
aa:bb
--------------------------
# "#"从左往右匹配,"##" "%%"指最长匹配,"#""%"为最短匹配
[root@localhost ~]# i='11,22,33,44'
[root@localhost ~]# echo $i
11,22,33,44
[root@localhost ~]# echo ${i%,*}
11,22,33
[root@localhost ~]# echo ${i%%,*}
11
[root@localhost ~]# echo ${i#*,}
22,33,44
[root@localhost ~]# echo ${i##*,}
44
3.3、解决window和linux换行符问题
-
linux中遇到换行符”\n“,会进行回车+换行操作,回车符反而只会作为控制字符(”^M“)显示,不发生回车操作
-
而window中要回车符+换行符(”\r\n“)才会回车换行,缺少一个控制字符或者顺序不对都不能正确的另起一行
方法一
tr -d " \r" 删除回车符
方法二
[root@localhost ~]# yum install dos2unix.x86_64 -y 利于dos2unix工具
[root@localhost ~]dos2unix 文本文件
4、cut命令
4.1、语法格式
cut 参数
cat 文件 | cut 选项
4.2、常用选项
选项 | 解释 |
---|---|
-f | 通过指定哪一个字符进行提取,使用”TAB“作为默认的字段分隔符 |
-d | ”TAB“是默认的分隔符,使用此选项可以更改为其他的分隔符 |
--complemnet | 此选项用于排除所指定的字符 |
--output-delimiter | 更改输出内容的分隔符 |
示例:
[root@localhost ~]# cut -d ':' -f 1 /etc/passwd 类似于awk -F: '{print $1}'
[root@localhost ~]# cut -d ':' -f 1-4,6,7 /etc/passwd 显示1-4,6,7字段
[root@localhost ~]# cut -d ':' --complement -f 1,2 /etc/passwd 删除1,2字段
[root@localhost ~]# cut -d ':' --complement -f 1,2 /etc/passwd --output-delimiter=' '
--output-delimiter=' ' 指定分隔符为' '
--------------------------------------------------------------
#截取字符串方法
[root@localhost ~]# i=123456789
[root@localhost ~]# echo ${i:2:4} 从0开始算
3456
[root@localhost ~]# echo $i | cut -b 3-6 从1开始算
3456
[root@localhost ~]# expr substr $i 3 4 3指从3开始,共有4个字符
3456
5、split命令
linux下将一个大文件拆分成若干小文件
5.1、语法格式
split 选项 参数 原始文件 拆分后文件名前缀
5.2、常用选项
选项 | 解释 |
---|---|
-l | 以行数拆分 |
-b | 以大小拆分 |
示例
[root@localhost ~]# split -l 10 /etc/passwd ./passwd 10行为一个文件拆分
6、eval命令
-
命令字前加elva时,shell会在执行命令之前扫描它两次
-
elva命令会首先扫描命令进行使用的置换,然后再执行该命令
-
该命令适用于一些扫描无法实现其功能的变量
-
该命令对变量进行两次扫描
[root@localhost ~]# echo "hellow word" > file
[root@localhost ~]# cat file
hellow word
[root@localhost ~]# myfile='cat file'
[root@localhost ~]# echo $myfile
cat file
[root@localhost ~]# eval $myfile 扫描两次
hellow word
-----------------------------------------------------
[root@localhost ~]# vim test01.sh
[root@localhost ~]# chmod +x test01.sh
[root@localhost ~]# cat test01.sh
#!/bin/bash
eval echo \$$# 先将$#置换成5 再输出5
[root@localhost ~]# ./test01.sh 1 2 3 4 5
5
[root@localhost ~]#