计算一行中的字符数时如何允许可变制表符长度

How to allow variable tab length when calculating number of characters in a line

我想计算一行中的字符数,但允许更改制表符的值。 我一直在研究一个 bash 脚本,它打印出超过 80 个字符的行(在给定的文件中):

grep -r '.\{81,\}' $args

我想我正在寻找一种方法来做这样的事情:

# pseudocode
TAB_LENGTH = 4
LINE_MAX = 80
if ( (number of non-tab characters) + TAB_LENGTH*(number of tab characters) > LINE_MAX)
    print out the file, line number, and line.
fi

有什么提示吗? (我对 bash 脚本编写还很陌生)。

如果您想计算一行中的字符数,您会将制表符视为单个字符 ('\t')。选项卡的宽度由您使用的 shell 设置。

所以你只需要

if ( (number of characters) > LINE_MAX) print out the file, line number, and line. fi

如果您想控制固定宽度,您可以使用 printf 来控制给定字符串的最小字段宽度。

printf "|%-5s|" "ABC"

这将有这样的输出:

|ABC··|

(本例中的·字符是空格的占位符)

可以在这里找到一个非常有用的页面(语法适用于 c++,但解释转换为 bash):http://wpollock.com/CPlus/PrintfRef.htm