常用Linux 命令整理 二、文本查看与处理

发布时间:2026/6/23 18:56:53
常用Linux 命令整理 二、文本查看与处理 二、文本查看与处理2.1 文件查看与过滤cat1、查看小文件内容cat 文件名2、同时查看多个文件cat file1 file23、将多个文件合并成一个cat file1 file2 merged.txt4、在每行前面显示行号cat -n 文件名5、显示非打印字符如制表符、换行符cat -A 文件名语法cat [options] [文件...]options:-n 对所有输出行编号包括空行-b 对非空行编号-s 压缩连续的空行为一行-A 显示所有字符包括制表符^I、行尾$等注意cat适合查看短文件几十行以内。如果文件很大如几百兆的日志cat会刷屏且难以定位此时应该用less。不小心cat一个二进制文件如cat /bin/ls会导致终端乱码可以用reset命令恢复没有参数时cat会等待标准输入键盘输入什么就输出什么CtrlD结束less1、分页查看大文件最常用less 文件名2、查看文件并显示行号less -N 文件名3、打开文件后搜索关键词/关键词向下搜索?关键词向上搜索语法less [options] 文件名常用选项与操作-N 显示行号空格 / f 向下翻一页b 向上翻一页回车 向下翻一行y 向上翻一行/字符串 向下搜索字符串按 n 继续N 反向?字符串 向上搜索g 跳到文件开头G 跳到文件末尾q 退出v 使用配置的编辑器编辑当前文件h 显示 less 的帮助文档pattern 仅显示匹配模式的行而不是整个文件head1、查看文件前 10 行默认head 文件名2、查看文件前 N 行head -n 20 文件名3、查看文件除最后 N 行外的所有行head -n -5 文件名显示除了最后5行的内容4、查看多个文件head -n 3 file1 file2语法head [options] [文件...]常用选项-n N 显示前 N 行N 可以是负数表示不显示最后 N 行-c N 显示前 N 个字节注意如果不指定文件head 会从标准输入读取。当查看多个文件时head 会在每个文件输出前加上 文件名 的分隔符。head -n -0 会输出全部内容因为减去0行等于全输出。tail1、查看文件最后 10 行默认tail 文件名2、查看文件最后 N 行tail -n 20 文件名3、实时追踪文件新增内容常用于查看日志tail -f 文件名4、从指定行号开始显示tail -n 100 文件名从第100行开始显示到末尾语法tail [options] [文件...]常用选项-n N 显示最后 N 行。N 表示从第 N 行开始到末尾-f 跟随模式文件有新内容时实时输出按 CtrlC 终止-F 类似 -f但会处理文件被删除/轮转的情况常用于日志监控-c N 显示最后 N 个字节注意tail -f 非常有用例如 tail -f /var/log/messages 可以实时看系统日志。tail -f 不会自动退出需要手动 CtrlC。若在脚本中设置超时可以用timeout 10 tail -f file。与 cat、head 一样不指定文件时从标准输入读取。tail -n 1 等价于 cat显示所有行。2.2 文件处理grep 搜索并匹配行1、在文件中搜索字符串grep hello file.txt在文件 file.txt 中查找字符串 hello并打印匹配的行2、搜索时忽略大小写grep -i error log.txt3、搜索整个目录下的所有文件递归grep -r error /var/log/4、显示匹配行的行号grep -n error log.txt5、显示不匹配的行反向匹配grep -v debug log.txt6、使用正则表达式grep ^[0-9] file.txt匹配以数字开头的行语法grep [options] pattern [文件名...]-i 忽略大小写-v 反向匹配显示不包含 pattern 的行-n 显示匹配行的行号-r / -R 递归搜索目录下的所有文件-l 只输出包含匹配的文件名不输出行内容-w 匹配整个单词而非子串-e 指定多个 pattern如 grep -e error -e fail--color 高亮显示匹配的文本很多发行版默认别名已加-a 将二进制文件当作文本处理注意grep默认使用基础正则表达式BRE。用-E选项可启用扩展正则ERE此时、?、|、()等无需转义。pattern 中如果包含空格或特殊字符如*、.必须加引号awk 搜索并匹配列awk把文本一行一行读进来自动按分隔符默认是空格或制表符把每一行切成多个“字段”像表格里的列。1、打印文件的某一列默认按空格/制表符分隔awk {print $1} file.txt 2、指定分隔符如冒号打印某列awk -F: {print $1} /etc/passwd3、只匹配包含某模式的行awk /error/ {print $0} log.txt4、对某列进行数值求和awk {sum $3} END {print sum} data.txt5、设置输出字段分隔符awk BEGIN{OFS,} {print $1,$2} file.txt在开始处理文件之前设置输出字段分隔符OFS为逗号对每一行输出该行的第1和第2个字段语法awk [options] pattern {action} [文件...]常用选项与内置变量-F 指定输入字段分隔符如 -F:$1, $2, ... 第1个字段、第2个字段…… $0 表示整行NR 当前行号NF 当前行的字段数BEGIN 在处理任何行之前执行的动作END 在所有行处理完之后执行的动作注意awk程序由pattern { action }组成可以省略 pattern表示每行都执行或省略 action表示打印整行。默认分隔符是连续的空白字符空格/制表符-F可以指定单个字符或正则表达式如-F[ ,]sed1、替换文件中第一个匹配的字符串默认只替换每行第一个sed s/old/new/ file.txt把每行第一个old替换为new2、全局替换一行中所有匹配sed s/old/new/g file.txt3、删除匹配的行sed /pattern/d file.txtsed 2,5d file.txt删除第2到第5行4、只打印匹配的行sed -n /pattern/p file.txt5、直接修改文件慎用sed -i s/old/new/g file.txt语法sed [options] script [文件...]s/old/new/ 替换默认只替换每行第一个匹配将old内容替换为new内容g 标志 全局替换一行中所有匹配d 删除行p 打印行常与 -n 配合-n 静默模式不自动打印所有行-i 直接修改文件危险建议先不加 -i 测试-e 执行多个脚本注意script是你告诉 sed 对每一行做什么操作 的指令串。多个命令可以用分号;隔开或用-e选项添加多个sed默认只输出到屏幕不修改原文件。-i会直接改文件务必小心。可以备份-i.bak。分隔符/可以换成其他字符如s|old|new|当要替换的字符串包含/时很方便。正则表达式中特殊字符需要转义如s/\.txt/\.md/。地址范围sed 2,5d file删除2-5行sed /start/,/end/d删除两个模式之间的行。cut1、按字节位置提取cut -b 1-5 file.txt2、按字符位置提取中文友好cut -c 1-5 file.txt3、按字段提取默认分隔符为制表符cut -f 1,3 file.txt4、指定分隔符提取字段cut -d: -f 1 /etc/passwd-d指定字段分隔符为冒号:-f 1表示从/etc/passwd文件中提取第一个字段语法cut [options] [文件...]-b 按字节位置如 -b 1,3,5 或 -b 1-5-c 按字符位置适用于多字节字符-f 按字段提取与 -d 配合-d 指定字段分隔符默认制表符--complement 反向提取显示不匹配的部分注意cut -d -f 2处理空格分隔时多个空格会视为多个空字段效果不理想。这种情况建议用 awk。cut 不能重新排列字段顺序只会按原顺序输出指定的列。没有指定文件时从标准输入读取。2.3 排序统计sort1、按字典序排序文件行sort file.txt2、按数字大小排序sort -n numbers.txt3、按第2列排序sort -k2 data.txt从第2个字段开始一直到行尾都作为排序的“键”即排序依据。也就是说它会先比较第2字段如果第2字段相同再比较第3字段、第4字段……直到行尾。sort -k2,2 data.txt只以第2字段作为排序键sort -k2,-k3 data.txt二级排序先按第2字段排第2字段相同时再按第3字段排sort -k2,3 data.txt把第2到第3字段看作一个整体的复合键先排第二字段再排第三字段4、倒序排序sort -r file.txt5、去重并排序sort -u file.txt语法sort [options] [文件...]常用选项-n 按数值排序-r 倒序-u 去重相同行只输出一次-k 指定排序的键列-k选项的完整格式-k start[.pos][,end[.pos]][modifiers]start开始字段1-basedend结束字段默认到行尾.pos字段内的字符位置很少用modifiers如n数值、r倒序等-t 指定字段分隔符默认空白-o 将结果写入文件可与输入文件同名注意默认排序规则是字典序字母顺序数字会按字符排序如 10 排在 2 前面需加 -n。对文本排序时注意 locale 影响中文排序可能不同可设置 LC_ALLC 获得传统排序。sort -u 等价于 sort | uniq但更高效。uniq1、去除相邻重复行需先 sortsort file.txt | uniq管道符|的作用是把左边sort file.txt的输出排序后的所有行直接传给右边uniq作为输入。2、统计重复次数sort file.txt | uniq -c3、只显示重复的行sort file.txt | uniq -d4、只显示不重复的行sort file.txt | uniq -u语法uniq [options] [输入文件] [输出文件]常用选项-c 每行前面显示重复次数-d 只输出重复的行出现至少两次-u 只输出不重复的行-i 忽略大小写-f N 跳过前 N 个字段比较注意uniq 只去除相邻的重复行所以通常需要先 sort。可以配合 sort -k 只对特定列去重sort -k2 file | uniq -f1跳过第一列比较。wc1、统计行数wc -l file.txt2、同时统计行、单词、字节wc file.txt语法wc [options] [文件...]-l 行数-w 单词数由空白字符分隔-c 字节数-m 字符数-L 最长行的长度注意不指定文件时从标准输入读取常用于管道ls -l | wc -l 统计文件数量。多个文件时输出多行统计最后一行显示总计。wc -l 统计行数时空文件输出 0文件末尾没有换行也不影响行数统计按换行符计数。