文件的正文处理

Linux 最大的优点,也许就在于文本操作:通过各种处理(通常是利用管道)将文本文件(或标准输入)转换成所需的格式。所以,可以读取标准输入和写入标准输出的程序都可以用于文本处理。

命令工具 功能简介
grep、egrep、fgrep 在文件中查找与正则表达式匹配的行
cut 从文件中提取列
paste 与cut命令相反,将多个文件视为垂直列,并将其合并到标准输出上
tr 将字符转为其他字符
expand,unexpand 在制表符和空格符之间进行转换
sort 按各种标准对文本行进行排序
uniq 在文件中查找相同的行
tee 复制文件,同时将其输出到标准输出上
awk 通过正则匹配数据,并操作
sed 一种模式匹配引擎,可针对文本行执行各种操作
m4 用来查找文件中的关键字,然后用某些值替代它们
Perl、PHP、Python、Ruby 一些成熟的编程语言

grep

grep [options] pattern [files]

常用选项

  • -v 只输出与正则表达式不匹配的行
  • -l 仅输出包含匹配行的文件的名称,而不是输出匹配的行
  • -L 仅输出不包含匹配行的文件的名称
  • -c 仅输出匹配的行数
  • -n 在输出结果的时候,每行的前面给出其原始行号
  • -b 在输出结果的时候,每行的前面给出其在文件中的偏移字节
  • -i 匹配时不区分大小写
  • -w 仅匹配完整的单词
  • -x 仅匹配完整的行,优先级高于 -w
  • -A num 输出匹配行,以及位于匹配行之后的num行
  • -B num 输出匹配行,以及位于匹配行之前的num行
  • -C num 输出匹配行,以及源文件中位于匹配行的前后num行内容
  • --color = always 突出显示匹配文本的颜色
  • -r 递归搜索目录及其子目录中的所有文件
  • -E 使用扩展的正则表达式 等同于 egrep
  • -F 使用固定的字符串列表,等同于 fgrep

egrep

egrep [options] pattern [files]

常用选项

  • 类似grep,需要关注正则表达式相关内容

fgrep

fgrep [options] [fixed_strings] [files]

常用选项

  • 类似grep,但无法接收正则,只能支持用换行符分隔的固定字符串列表。搜索非字母数字字符如* 和 { 时,非常方便。

cut

cut -(b|c|f)range [options] [files]

常用选项

定位依据:

按照字节定位,bytes,用-b选项;

按照字符定位,characters, 用 -c 选项;

按照域定位, fileds,用 -f 选项。

  • -d C 使用字符 C 作为 -f 选项的字段之间的输入分隔符。默认使用制表符。
  • –output-delimiter = C 使用字符C 作为 -f 选项的字段之间的输入分隔符。默认使用制表符。
  • -s 排除(不输出)不包含分隔符的行。

paste

paste [options] [files]

常用选项

  • -d delimiters 使用给定分隔符来分隔各列,默认使用制表符。可提供一个单个字符如( -d:),也可以提供一个字符列表( -dxyz)。
  • -s 将输出的行和列进行转置。

tr

tr [options*] *charset1 [charset2]

常用选项

非常适合于快速简单的转换,但是对一些更复杂的转换,则用sed、awk、perl等。

  • -d 从输入中删除包含在charset1 中的字符
  • -s 从输入中删除(位于charset1中的)那些连续重复字符。如tr -s aeiouAEIOU 命令会将连续重复的元音,变成单个元音(如将reeeeeeeally 变成 really)
  • -c 只对 charset1 之外的字符进行操作
  • -t 如果charset1 长于 charset2, 通过阶段charset1 使其长度相同。如果没有提供 -t 的话,则不断复制charset2 的最后一个字符,直到charset2 和charset1 的长度相同为止。

expand、unexpand

expand [options] [files]

unexpand [options] [files]

常用选项

expand会将制表符转换为特定数量的空白字符,使其看起来长度不变,unexpand与其相反。默认情况下,每8个空格兑换一个制表符。

检查文件是否包含空格或制表符,可以用 cat -T 命令,它将制表符显示为^I, 此外,也可用 od -c 命令,它将制表符显示为 \t。

  • -t N 规定用N个空格替换一个制表符

sort

sort [options] [files]

常用选项

  • -f 排序时区分大小写
  • -n 按照数字顺序(如9 在10 之前)进行排序,而不是按照字母顺序(如这时,10会在9 之前,因为10以1开头)
  • -g 另一种有不同算法的数字排序方法,详查info sort
  • -u 排序时,忽略重复行
  • -c 不进行排序,只检查输入是否已经晋国排序处理。是的话,不输出任何内容,否则,输出错误信息
  • -b 忽略各行的前导空格
  • -r 对输出进行反转:按照从最大到最小的顺序来排序
  • -t X 使用X作为 -k 选项的字段分隔符
  • -k key 选择用于排序的键(结合 -t选项后,可以指定各个键之间的分隔符)

uniq

uniq [options] [files]

常用选项

  • -c 计算相邻的重复行的数量

  • -i 操作时不区分大小写

  • -u 仅输出唯一的行

  • -d 仅输出重复行

  • -s N 检测重复行时,忽略每行中的前面N个字符

  • -f N 当检测重复行时,忽略每行中的前面N个由空白符分隔的第一个字段

  • -w N 当检测重复行时,仅考察每行的前N个字符。当与 -s 或 -f 选项结合使用时,sort将忽略每行前面制定法数量的字符或字段,然后考察接下来的N个字符。

tee

tee [options*] *files

常用选项

最常见用于管道命令上

  • -a 附加至文件末尾,而非覆盖文件
  • -i 忽略中断信号

awk

sed

m4

备注