命令速查系列——文件的正文处理
文件的正文处理
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
备注
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BYA's Blog!
评论