命令:cut

作用:Cut 文件内容查看,显示行中的指定部位,删除指定字段。
cat test.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98

Option
-f 显示指定字段的内容
cut -f2,3 test.txt
Name Mark
tom 69
jack 71
alex 68

    • complement 选取指定字段自外的列
      -d 指定字段分隔符
      cat test2.txt
      No;Name;Mark;Percent
      01;tom;69;91
      02;jack;71;87
      03;alex;68;98

cut -f2 -d";" test2.txt
Name
tom
jack
alex

指定字段的字符或者字节范围
-b 表示字节;

-c 表示字符;

-f 表示定义字段

cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz

打印1-3字符
cut -c1-3 test.txt
abc
abc
abc
abc
abc

<think> 我们正在讨论CentOS 7系统中的cut、sort、uniq命令的详细介绍及使用方法。根据用户要求,我们需要深入并详细解释每个命令,包括其常用选项和示例。 参考引用内容,我们可以整合关于这些命令的信息,特别是引用中已经给出了一些示例和选项说明。 需要注意的是,用户要求详细深入,所以我们要尽可能覆盖命令的常用选项和典型用法,同时结合实例。 以下是每个命令的详细说明: 1. cut命令:用于从文件的每一行中提取部分内容。 常用选项: -d:指定字段的分隔符,默认为制表符(TAB) -f:指定要提取的字段,可以是一个数字(如3),多个数字(如3,5),或一个范围(如3-5) -c:按字符位置提取(如-c1-10表示提取每行的第1到第10个字符) --complement:排除所指定的字段 --output-delimiter:指定输出时使用的分隔符(默认使用输入的分隔符) 示例: cut -d: -f1,3 /etc/passwd # 以冒号分隔,提取第1和第3个字段 cut -c1-5 /etc/passwd # 提取每行的前5个字符 2. sort命令:用于对文本文件的行进行排序。 常用选项: -t:指定字段分隔符 -k:指定排序的字段(可以指定多个字段,格式为-k起始位置[,结束位置]) -n:按数值排序 -r:逆序排序(降序) -u:去重(只输出重复行的第一行,相当于uniq的简化版) -f:忽略大小写 -b:忽略每行前面的空白 示例: sort -t: -k3 -n /etc/passwd # 按冒号分隔的第三个字段(用户ID)数值排序 sort -t: -k3,5 -n /etc/passwd # 按第三个字段到第五个字段的数值排序 3. uniq命令:用于报告或忽略重复的行(通常需要先排序,因为uniq只检查相邻的行)。 常用选项: -c:在每行前显示该行重复出现的次数 -d:只显示重复的行(每组重复行只显示一次) -u:只显示不重复的行(唯一行) -i:忽略大小写 示例: sort file.txt | uniq -c # 统计每行出现的次数 sort file.txt | uniq -d # 只显示重复的行 另外,引用中还提到了wc命令,但用户没有要求,不过我们可以简要提及,因为引用中出现了: wc命令:统计文件的行数、单词数、字符数。 -l:行数 -w:单词数 -m:字符数(注意:换行符也会被计数) 但用户问题中只要求cut、sort、uniq,所以我们重点放在这三个命令上。 我们还可以给出一些组合使用的例子,例如: 使用管道将多个命令组合:cut取出某列,然后排序,再去重并计数。 示例组合: cut -d: -f7 /etc/passwd | sort | uniq -c | sort -nr 解释:先提取/etc/passwd的第7个字段(用户的登录shell),然后排序,再统计每种shell出现的次数(uniq -c),最后按次数从大到小排序(sort -nr)。 由于用户要求详细,我们每个命令都单独详细介绍,并给出多个示例。 注意:在CentOS 7中,这些命令是GNU coreutils的一部分,因此选项和用法在GNU/Linux系统中是通用的。 下面按照用户要求,用中文详细回答。 </think>### CentOS 7系统中 `cut`、`sort`、`uniq` 命令详解 #### 一、`cut` 命令:字段提取工具 **作用**:从文本行中提取指定字段(列)或字符范围 **核心选项**: - `-d`:指定字段分隔符(默认为制表符) - `-f`:选择字段编号(支持 `N`/`N,M`/`N-M` 格式) - `-c`:按字符位置提取(如 `1-10`) - `--output-delimiter`:自定义输出分隔符 - `--complement`:反向选择(排除指定字段) **应用场景**: 1. **提取/etc/passwd用户信息**: ```bash cut -d: -f1,3 /etc/passwd # 提取用户名(字段1)和UID(字段3) ``` ``` root:0 bin:1 daemon:2 ``` 2. **提取固定字符位置**: ```bash echo "Hello World" | cut -c1-5 # 输出 "Hello" ``` 3. **自定义输出格式**: ```bash cut -d: -f1,7 --output-delimiter=" -> " /etc/passwd | head -2 ``` ``` root -> /bin/bash bin -> /sbin/nologin ``` #### 二、`sort` 命令:文本排序工具 **作用**:对文本行进行排序(默认按ASCII码升序) **核心选项**: - `-t`:指定字段分隔符 - `-k`:按指定字段排序(`-k3` 表示第3字段) - `-n`:按数值大小排序 - `-r`:逆序排序(降序) - `-u`:去重(相当于 `sort | uniq`) - `-f`:忽略大小写 **应用场景**: 1. **按UID排序用户**: ```bash sort -t: -k3 -n /etc/passwd # 按第3字段(UID)数值升序 ``` 2. **多字段排序**: ```bash sort -t: -k3,5 -n /etc/passwd # 按字段3到5排序 ``` 3. **统计重复行**: ```bash echo -e "apple\norange\napple" | sort | uniq -c ``` ``` 2 apple 1 orange ``` #### 三、`uniq` 命令:重复数据处理 **作用**:检测/过滤相邻重复行(需先排序) **核心选项**: - `-c`:显示重复次数 - `-d`:仅输出重复行 - `-u`:仅输出唯一行 - `-i`:忽略大小写 **应用场景**: 1. **统计日志IP出现次数**: ```bash grep "Failed login" /var/log/secure | cut -d' ' -f11 | sort | uniq -c | sort -nr ``` 2. **提取唯一用户名**: ```bash cut -d: -f1 /etc/passwd | sort | uniq -u ``` 3. **检查重复配置文件项**: ```bash sort /etc/ssh/sshd_config | uniq -d ``` #### 四、组合应用示例 **案例:分析访问最频繁的IP** ```bash cat access.log | cut -d' ' -f1 | sort | uniq -c | sort -nr | head -10 ``` 1. `cut -d' ' -f1`:提取IP(第1字段) 2. `sort`:排序使相同IP相邻 3. `uniq -c`:统计IP出现次数 4. `sort -nr`:按次数降序排序 5. `head -10`:显示Top10 IP **输出示例**: ``` 1428 192.168.1.23 1205 10.0.0.45 983 172.16.8.92 ``` ### 关键概念对比 | 命令 | 核心功能 | 依赖排序 | 典型应用场景 | |-------|------------------------------|----------|---------------------------| | `cut` | 提取列/字符范围 | 否 | 数据字段提取 | | `sort`| 全局排序 | - | 数据整理/去重预处理 | | `uniq`| 处理相邻重复行 | 是 | 重复数据统计/唯一值筛选 | ### 注意事项 1. **`uniq` 必须配合 `sort`** ```bash # 错误用法(未排序) echo -e "b\na\na" | uniq -c # 输出:1 b, 1 a, 1 a # 正确用法 echo -e "b\na\na" | sort | uniq -c # 输出:2 a, 1 b ``` 2. **特殊字符处理** 包含空格的字段需用引号: ```bash echo '"John Doe",30' | cut -d'"' -f2 # 输出 John Doe ``` 3. **性能优化** 大文件处理建议组合使用: ```bash # 高效去重(先排序再唯一化) sort large_file.txt | uniq > unique.txt ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值