如何切断长度超过一定宽度的线条,并用省略号标记被切断的线条?
只应标记实际缩短的线条,而不应标记原本长度合适的线条。
我想在管道中使用该命令。
答案1
这将截断字符串,截掉另外三个字符,如果长度长于您作为参数提供的值,则添加“...”。
other_programs | \
awk -v len=40 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }'
答案2
尝试这个:
awk -F '' '{if (NF > 70) {print substr($0, 0, 71)"..."} else print $0}'
如果NF太高,更简单的方法是:
awk '{if (length($0) > 70) {print substr($0, 0, 71)"..."} else print $0}'
或者更短的版本:
awk 'length > 70{$0=substr($0,0,71)"..."}1'
答案3
一些可能性:
使用 sed
sed -E 's/(.{N})(.{1,})$/\1.../' file
使用 perl 稍微优雅一些(使用后视)
perl -pe 's/(?<=.{N}).{1,}$/.../' file
其中N
是想要用省略号替换的字符数。
答案4
另一个perl
解决方案:
perl -ple '$_ = sprintf "%.70s...", $_ if length > 70' file