Bash: 用三位数字输出显示 wc?
Bash: displaying wc with three digit output?
正在对目录进行字数统计。
ls | wc -l
如果输出是“17”,我希望输出显示为“017”。
我玩过 | printf 运气不佳。
如有任何建议,我们将不胜感激。
你可以使用 sed。
ls | wc -l | sed 's/^17$/017/'
这适用于所有两位数。
ls | wc -l | sed '/^[0-9][0-9]$/s/.*/0&/'
printf
是格式数字的方法:
printf "There were %03d files\n" "$(ls | wc -l)"
ls | wc -l
会告诉您它遇到了多少行 parsing the output of ls
,这可能与目录中(非点)文件名的数量不同。如果文件名有换行符怎么办?获取目录中文件数的一种可靠方法是
x=(*)
printf '%03d\n' "${#x[@]}"
但这只适用于支持数组的 shell。如果您想要 POSIX 兼容的方法,请使用 shell 函数:
countargs() { printf '%03d\n' $#; }
countargs *
这是有效的,因为当 glob 扩展时,shell 维护 glob 扩展的每个成员中的单词,而不管文件名中的字符。但是,当您通过管道传输文件名时,管道另一端的命令无法判断它是普通字符串以外的任何内容,因此它无法进行任何特殊处理。
正在对目录进行字数统计。
ls | wc -l
如果输出是“17”,我希望输出显示为“017”。
我玩过 | printf 运气不佳。 如有任何建议,我们将不胜感激。
你可以使用 sed。
ls | wc -l | sed 's/^17$/017/'
这适用于所有两位数。
ls | wc -l | sed '/^[0-9][0-9]$/s/.*/0&/'
printf
是格式数字的方法:
printf "There were %03d files\n" "$(ls | wc -l)"
ls | wc -l
会告诉您它遇到了多少行 parsing the output of ls
,这可能与目录中(非点)文件名的数量不同。如果文件名有换行符怎么办?获取目录中文件数的一种可靠方法是
x=(*)
printf '%03d\n' "${#x[@]}"
但这只适用于支持数组的 shell。如果您想要 POSIX 兼容的方法,请使用 shell 函数:
countargs() { printf '%03d\n' $#; }
countargs *
这是有效的,因为当 glob 扩展时,shell 维护 glob 扩展的每个成员中的单词,而不管文件名中的字符。但是,当您通过管道传输文件名时,管道另一端的命令无法判断它是普通字符串以外的任何内容,因此它无法进行任何特殊处理。