计算一行中的字符数时如何允许可变制表符长度
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
我想计算一行中的字符数,但允许更改制表符的值。 我一直在研究一个 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