Windows下Git Bash实现文本行按指定长度补全短横线的问题
解决Git Bash下补全行到指定长度的问题
方案一:用awk(跨平台最可靠)
设置目标长度变量后,用awk一次性处理文件,无需循环,在Ubuntu和Git Bash下都能正常运行:
# 设置目标总长度 string_limit=13 # 处理data.txt awk -v limit="$string_limit" '{ printf "%s%s\n", $0, substr("------------------------", 1, limit - length($0)) }' data.txt
方案二:用Bash循环+tr兼容Git Bash
如果偏好纯Bash写法,通过先输出空格再转成短横线的方式规避printf的兼容性问题:
string_limit=13 while IFS= read -r line; do # 计算需要补充的短横线数量 fill_length=$((string_limit - ${#line})) # 输出原行+指定数量的短横线 printf "%s%${fill_length}s\n" "$line" | tr ' ' '-' done < data.txt
示例验证
输入文件data.txt内容:
colA coluB columC
设置string_limit=13后,两种方案都会输出:
colA---------- coluB--------- columC--------
兼容性说明
Ubuntu使用的是GNU printf,部分格式符写法在Git Bash(基于MSYS2)中行为不一致,比如直接用printf "%-${string_limit}s" "$line" | tr ' ' '-'可能在Git Bash中出现换行或格式异常,上述两种方案通过更通用的写法避免了这个问题。
内容的提问来源于stack exchange,提问作者Y Bai
相关产品推荐
相关产品推荐

