如何以固定长度块打印可变长度行?

use*_*987 4 printing bash newline break

我需要分析(使用grep)并打印(使用某些格式)应用程序日志的内容。

该日志包含可变长度行的文本数据。我需要的是,经过一些 grep 后,循环输出的每一行并以最大固定长度 50 个字符打印它。如果一行超过 50 个字符,它应该打印一个换行符,然后继续下一行的其余部分,依此类推,直到该行完成。

我尝试printf这样做,但它不起作用,我不知道为什么。尽管字符(制表符)有效,但它只是以与 相同的方式输出行,echo而不考虑格式。printf\t

function printContext
{
    str="$1"
    log="$2"
    tmp="/tmp/deluge/$$"

    rm -f $tmp

    echo ""
    echo -e "\tLog entries for $str :"

    ln=$(grep -F "$str" "$log" &> "$tmp" ; cat "$tmp" | wc -l)

    if [ $ln -gt 0 ];
    then
            while read line
            do
                    printf "\t%50s\n" "$line"
            done < $tmp
    fi

}
Run Code Online (Sandbox Code Playgroud)

怎么了?我知道我可以创建一个子字符串例程来完成此任务,但printf对于这样的事情应该很方便。

anu*_*ava 6

代替:

printf "\t%50s\n" "$line"
Run Code Online (Sandbox Code Playgroud)

使用

printf "\t%.50s\n" "$line"
Run Code Online (Sandbox Code Playgroud)

将行截断为仅 50 个字符。