替换文本
sed对每一行应用编辑命令。替换命令s/old/new/替换每行的第一个匹配项;g替换所有匹配项,I忽略大小写。-i直接编辑文件而非打印结果。sed 's/old/new/g' [file]sed -i 's/old/new/g' [file]sed -i 's/old/new/gI' [file]
任意字符都可以作为 s 命令的分隔符:s|/usr/bin|/usr/local/bin|可避免路径中的斜杠转义。删除或打印特定行
d删除匹配行;-n配合p仅打印选中的行。地址可以是模式、行号或范围。sed '/pattern/d' [file]sed -i '/^$/d' [file]sed -n '5,10p' [file]sed -n '/pattern/p' [file]
提取字段
awk将每行分割为字段:$1是第一个字段,$0是整行,NR是行号。-F将字段分隔符从空白改为其他字符。awk '{print $1}' [file]awk -F: '{print $1, $3}' /etc/passwdawk '{print NR, $0}' [file]
cut是轻量级替代方案,用于简单的列提取,按分隔符(-d、-f)或字符位置(-c)。cut -d: -f1 [file]cut -d',' -f1,3 [file]cut -c1-10 [file]
条件过滤
awk 程序格式为condition { action }:匹配条件的行执行动作(默认:打印该行)。awk '$3 > 100' [file]awk '/pattern/ {print $2}' [file]awk 'NR>=5 && NR<=10' [file]
awk '{sum += $1} END {print sum}' [file]awk '{sum += $1} END {print sum/NR}' [file]
排序行
默认按字母排序;-n按数字排序,-r反转顺序,-u去重,-t和-k按特定字段排序。-h理解人类可读的大小格式如 2K 和 1G。sort [file]sort -n [file]sort -r [file]sort -t: -k3-n [file]sort -u [file]
查找重复行
uniq只比较相邻行,因此需要先排序。-c统计出现次数,-d仅显示重复行,-u仅显示唯一行。sort [file] | uniqsort [file] | uniq -c | sort-rnsort [file] | uniq -d
sort|uniq -c|sort -rn管道是经典的频率计数器:按出现次数对每行不同内容进行排名。转换或删除字符
tr将字符从一个集合映射到另一个,-d删除字符,-s将重复字符压缩为一个。tr 'a-z' 'A-Z' < [file]tr -d '[:digit:]' < [file]tr -s ' ' < [file]tr '\n' ' ' < [file]
比较文件
diff -u是标准的补丁式比较;-y并排显示文件;cmp按字节比较,适合二进制文件。diff -u [file1] [file2]diff -y [file1] [file2]cmp [file1] [file2]
comm显示每个已排序文件中独有的行以及共有的行,分三列显示。通过数字抑制列显示。comm [file1] [file2]comm -12 [file1] [file2]
合并文件
paste逐行将文件拼接在一起;-s将一个文件的所有行合并为一行。join根据共同字段匹配两个文件的行,类似数据库连接。paste [file1] [file2]paste -d',' [file1] [file2]paste -s [file]join [file1] [file2]join -t: -11-23 [file1] [file2]
格式化文本
将字段对齐为表格,或换行长行。fmt智能地重新包装段落,fold在指定宽度处硬截断(-s在空格处断开)。column -t [file]column -t -s',' [file]fmt -w80 [file]fold -s-w80 [file]
添加行号
nl默认仅对非空行编号;-ba对所有行编号,与cat -n相同。nl [file]nl -ba [file]cat-n [file]
计数
统计行数、单词数和字节数;-m统计多字节编码中的字符数。wc [file]wc-l [file]wc-w [file]wc-c [file]
反转与打乱
tac倒序打印文件(最后一行先输出),rev反转每行的字符顺序,shuf随机打乱行顺序。tac [file]rev [file]shuf [file]shuf -n1 [file]