2020-09-11 00:09:49
cut命令是Linux中用于提取文本特定列的实用工具,可通过字符位置或分隔符实现字段分割,结合其他命令可高效处理结构化数据。
一、按字符位置提取适用于格式固定的文本(如日志时间戳),通过-c指定字符范围或位置:
提取指定范围字符:
cut -c5-10 filename提取每行第5到第10个字符。
提取单个字符:
cut -c10 filename提取每行第10个字符。
提取从某位置到行尾:
cut -c5- filename从第5个字符开始提取至行尾。
提取行首到某位置:
cut -c-5 filename提取每行前5个字符。
注意:字符计数从1开始,非0。

适用于结构化文本(如CSV、系统文件),通过-d指定分隔符,-f指定字段编号:
提取单个字段:
cut -d: -f1 /etc/passwd以冒号为分隔符,提取第1字段(用户名)。
提取多个字段:
cut -d: -f1,7 /etc/passwd提取第1和第7字段(用户名和登录Shell)。
字段编号超出范围:若字段不存在,cut会返回空值而非报错。

当分隔符不统一(如混合空格和制表符)时,先用tr压缩空格,再配合cut:
合并连续空格:
cat data.txt | tr -s ' ' | cut -d' ' -f3将连续空格压缩为单个后,提取第3字段。
应用场景:处理命令行输出(如free -m提取可用内存)或不规则分隔的文本文件。
cut常与ps、grep、awk等命令结合,实现复杂数据提取:
提取进程PID:
ps aux | grep nginx | grep -v grep | cut -c10-15从ps输出中过滤nginx进程,提取PID所在字符区域。
提取CSV文件列:
cut -d, -f2 data.csv提取CSV文件的第2列(如邮箱地址)。
结合awk优化:若需更复杂的字段处理,可替换为awk(如awk -F',' '{print $2}'),但cut在简单场景下更高效。
cut命令通过-c(字符位置)和-d/-f(分隔符+字段)实现灵活的数据提取,结合tr、grep等命令可应对复杂场景。掌握这些技巧后,可快速处理日志、系统文件或CSV数据,提升工作效率。