走进shell之--熟练掌握编辑文本功能命令
Posted 丁CCCCC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了走进shell之--熟练掌握编辑文本功能命令相关的知识,希望对你有一定的参考价值。
sort、uniq、tr、cut
一、sort 命令
以行为单位对文件内容进行排序,也可以根据不同的数据类型排序
1.1 格式
sort [选项] 参数
或
cat file | sort 选项
1.2 常用选项
选项 | 作用 |
---|---|
-f | 忽略大小写来进行比较 |
-b | 忽略每行前面的空格 |
-n | 按照数字来进行排序 |
-r | 反向排序 |
-u | 等同于uniq,表示相同的数据仅显示一行 |
-t | 指定字段分隔符,默认使用 TAB 键分离 |
-k | 指定排序字段 |
-o<输出文件> | 将排序后的结果转存至指定文件 |
1.3 测试
-n
- 按照数字排序,并且按照总量排序
-r - 配合-n使用,倒排
-f -b - f忽略大小写,b忽略空行
-t -k - t来指定:,k选择第三列
二、uniq 命令
用于报告或忽略文件中连续的重复行,一般与sort配合使用
2.1 格式
uniq [选项] 参数
或
cat file | uniq 选项
2.2 常用选项
选项 | 作用 |
---|---|
-c | 进行计数,并删除文件中重复的行 |
-d | 仅显示连续的重复行 |
-u | 仅显示出现一次的行 |
2.3 测试
-
-c
- 删除重复行
- 删除重复行
-
-u
- 配合sort命令,按照数字排序后,再显示不重复的行
- 配合sort命令,按照数字排序后,再显示不重复的行
三、tr 命令
常用来对来自标准输入的字符进行替换、压缩和删除
3.1 格式
tr [选项] [参数]
3.2 常用选项
选项 | 作用 |
---|---|
-c | 保留字符集1的字符,其他的字符包括换行符\\n 用字符集2替换 |
-d | 删除所有属于字符集1的字符 |
-s | 将重复出现的字符串压缩为一个字符串,用字符串2替换,=字符集1 |
-t | 字符集2替换字符集1,不加选项同结果 |
参数
- 字符集1:指定要转换或删除的原字符集。当执行转换操作时,必须使用参数 “字符集2” 指定转换的目标字符集,但执行删除操作时,不需要“字符集2”
- 字符集2:指定要转换成目标字符集
3.3 测试
-t
- 不加该选项默认也有此效果
-c
- 将ab替换为0
- 由于\\n无法被替换,所以结果会换行,除ab外都为0
- 对比没有\\n选项的测试
-d
- 删除
-s
- 压缩重复出现的字符
把 " : " 替换为 " \\n "
使用命令 -s 更改$PATH里的内容
Windows中的换行符 ’ ^M ’ 替换
使用命令
Linux的换行符为 " \\n " 会进行回车和换行的功能,回车符 " ^M " 只会作为控制字符显示,没有功能。如果要Windows转换换行回车功能,需要 " \\r " " \\n " 功能使用,缺一个都不能正确的换行
cat windows.txt | tr -s "\\r" "\\n" > new_windows.txt
或
cat windows.txt | tr -d "\\r" > new_windows.txt
四、更简单的数组排序
使用tr命令,配合sort完成
num=(10 30 20 50 40 60) # 随机排序
echo ${num[*]}
10 30 20 50 40 60
echo ${num[*]} | tr " " "\\n" | sort -n # tr转换空格会回车,sort按照数字排序
10
20
30
40
50
60
num1=`echo ${num[*]} | tr " " "\\n" | sort -n | tr "\\n" " "` # 使用新的变量名,将结果重新切换为空格符
echo ${num1[*]} # 输出结果
10 20 30 40 50 60
五、cut 命令
显示行中的指定部分、删除文件的指定字段
5.1 格式
cut 选项 参数
或
cat file | cut 选项
5.2 常用选项
选项 | 作用 |
---|---|
-f | 通过指定哪一个字段进行提取,cut默认是“tab”作为分隔符 |
-d | “tab”默认分隔符,使用这个更改其他的分隔符 |
- -complement | 用于排除所指定的字段 |
- -output-delimiter | 更改输出内容的分隔符 |
5.3 测试
-f
选择第四列
cut -d ":" -f 4 /etc/passwd
或
awk -F ":" '{print $4}' /etc/passwd # awk同样能完成
-d、-f
分割123和6列信息出来
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1-3,6
- -complement
排除第二列查询
grep '/bin/bash' /etc/passwd | cut -d ':' --complement -f 2
- -output-delimiter
特定查看第1、7列的信息
cut -d ':' -f1,7 --output-delimiter=' ' /etc/passwd
以上是关于走进shell之--熟练掌握编辑文本功能命令的主要内容,如果未能解决你的问题,请参考以下文章