grep命令--line-number与-C9无填充选项?行号位数不同致输出错位
解决grep行号输出错位的问题
使用grep --line-number -C9时,由于命令本身没有行号对齐填充选项,当行号从一位数变为两位数时,输出会出现错位:
当前错位输出:
file-7- xxxxxxxx file-8- xxxxxxxx file-9- xxxxxxxx file-10- xxxxxxxx
期望对齐后的输出:
file -7- xxxxxxxx file -8- xxxxxxxx file -9- xxxxxxxx file-10- xxxxxxxx
可以通过管道结合其他命令处理grep输出,实现行号对齐:
方法1:用sed快速匹配修复一位数行号
grep --line-number -C9 "搜索关键词" 目标文件 | sed 's/file-\([0-9]\)-/file -\1-/g'
方法2:用awk实现通用对齐(适配多位数行号)
先获取目标文件的最大行号长度,再统一格式化输出:
# 获取目标文件总行数,计算最大行号的字符长度 max_line_len=$(wc -l < 目标文件 | wc -c) # 处理grep输出,对齐行号 grep --line-number -C9 "搜索关键词" 目标文件 | awk -v len=$max_line_len -F'-' '{ $2 = sprintf("%"len"s", $2); print "file-"$2"-"substr($0, index($0, $3)) }'
内容的提问来源于stack exchange,提问作者Vitaly Zdanevich
相关产品推荐
相关产品推荐

