返回

极客的瑞士军刀:精解 sort、uniq、tr、cut、split、eval 命令

见解分享

对于 Linux 爱好者和脚本编写者来说,sort、uniq、tr、cut、split 和 eval 命令就像一把多功能瑞士军刀,提供了强大的文本处理能力。从对数据排序和筛选到转换和拆分,这些命令在各种场景下都不可或缺。

sort 命令

sort 命令按照指定规则对文本行进行排序。

语法格式

sort [选项] [文件]

常用选项

选项 说明
-n 按照数字进行排序
-r 反向排序
-u 等同于 uniq,表示相同的数据仅显示一行
-t 指定字段分隔符,默认使用[TAB]键分

uniq 命令

uniq 命令过滤重复行,只保留文本文件中唯一的一行。

语法格式

uniq [选项] [文件]

常用选项

选项 说明
-c 显示每行出现的次数
-d 仅显示重复行
-u 仅显示唯一行,等同于 sort -u

tr 命令

tr 命令将文本中的一个字符或一组字符替换为另一个字符或一组字符。

语法格式

tr [选项] [删除集] [替换集] [文件]

cut 命令

cut 命令从文本行中提取指定列。

语法格式

cut [选项] [字段列表] [文件]

常用选项

选项 说明
-d 指定字段分隔符,默认使用[TAB]键分
-f 指定要提取的字段
-c 按字符位置提取字段

split 命令

split 命令将一个大文件拆分成更小的文件。

语法格式

split [选项] [文件] [输出文件前缀] [大小]

常用选项

选项 说明
-b 按字节拆分
-l 按行拆分
-C 按字符拆分

eval 命令

eval 命令执行命令或表达式,并将结果作为命令行参数进行处理。

语法格式

eval [命令或表达式]

常用选项

选项 说明
-p 打印命令或表达式的结果,而不执行它

实例

下面是一个使用 sort、uniq、tr、cut、split 和 eval 命令的示例脚本,用于从日志文件中提取唯一 IP 地址并按数量降序排序:

#!/bin/bash

# 提取 IP 地址
grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log |

# 去重 IP 地址
sort | uniq -c |

# 降序排序
sort -rn |

# 提取 IP 地址
cut -d ' ' -f 2 |

# 每行只显示 IP 地址
tr -s ' ' |

# 将结果保存到文件中
eval "cat > unique_ips.txt"

总结

sort、uniq、tr、cut、split 和 eval 命令是 Linux 环境下强大的文本处理工具。掌握这些命令可以让您高效地处理各种文本数据,从排序和筛选到转换和拆分。这些命令是自动化任务和编写复杂脚本的利器,为 Linux 用户提供了广泛的文本操作可能性。