linux之col命令的使用
col
是一个用于过滤输入中的反向(及半反向)行进控制字符,确保输出顺序正确,并仅包含正向和半正向的行进控制符。此外,它还可以在可能的情况下用制表符替换空白字符。
这对于处理 nroff(1)
和 tbl(1)
的输出特别有用。
基本语法
col [选项] < 输入文件 > 输出文件
核心选项
选项 | 描述 |
---|---|
-b --no-backspaces | 忽略所有退格符(只打印每列最后字符) |
-f --fine | 启用精细模式(允许半行前进符) |
-p --pass | 放行未知控制序列(默认会过滤) |
-h --tabs | 将连续空格转为制表符(默认行为) |
-x --spaces | 禁用空格转制表符(保持原样空格) |
-l num --lines=num | 设置行缓冲数量(默认128行) |
使用示例
1. 基础过滤
# 处理man手册输出 man ls | col -b > ls_manual.txt # 处理tbl生成的表格 tbl data.t | nroff | col -x > formatted_table.txt
2. 高级控制
# 保留半行控制符(用于精细排版) groff -tascii document.roff | col -f # 处理含特殊控制符的文件 col -bp < control_chars.txt > cleaned.txt
处理的控制字符
转义序列 | 十进制值 | 功能 |
---|---|---|
esc-7 | \0337 | 反向换行 |
esc-8 | \0338 | 半反向换行 |
esc-9 | \0339 | 半正向换行 |
\b | 8 | 退格(首列忽略) |
\n | 10 | 换行+回车 |
\r | 13 | 回车 |
\t | 9 | 水平制表 |
\v | 11 | 垂直制表(反向换行) |
典型工作流
注意事项
字符集处理:
- 自动跟踪shift in/out(字符集切换)
- 确保输出时字符集正确
缓冲限制:
- 默认缓冲128行(可通过
-l
调整) - 尝试回溯已刷新行会触发警告
特殊场景:
# 处理包含ansi颜色代码的文本 col -bp < colored_text.log > plain_text.log
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论