我在电子邮件标题中有一个很长的字段,其中包含多行,如下所示:
To: John Smith <johnsmith@example.com>, Alex Smith <alexsmith@example.com>,
Superman Smith <supermansmith@example.com>, Devin Smith <devinsmith@example.com>,
Al Smith <alsmith@example.com>, Jane Smith <janesmith@example.com>,
Thomas Smith <thomassmith@example.com>
我想将其截断为更短的内容,例如:
To: John Smith <johnsmith@example.com>, Alex Smith <alexsmith@examp...
基本上,我希望输出为一行,尽可能在终端窗口的宽度内拟合(我猜是使用$ COLUMNS变量)。
答案 0 :(得分:2)
formail
实用程序非常方便:
formail -c < ~/tmp/email.eml |
sed -r 's/\t/ /g; s/^(.{'$(( $(tput cols) - 5))'}).*/\1 .../'
formail
可以在procmail
包
使用tput
查询终端尺寸
答案 1 :(得分:1)
目前还不清楚你这样做的上下文,但是如果文件中包含电子邮件,
awk -v maxLineSz=${COLUMNS:-80} \
'/^To:/{if (length() > maxLineSz-4) { $0=substr($0,1,maxLineSz-4) "..." }}1' emailFile
<强>输出强>
To: John Smith <johnsmith@example.com>, Alex Smith <alexsmith@example.com>, Supe...
受影响的唯一行是以“收件人:”
开头的行最后的1
,确保打印所有输入行。