sed 脚本将列限制为 15 个字符

sed 脚本将列限制为 15 个字符

一直试图用我的正则表达式 foo 来解决这个问题,但做得不太好。

需要 sed 脚本来格式化文件:

844388240 920009 XXXXXXXXXX YYYYYYYYYYYYYYYYYYYYYYY
800450220 910003 AAAAAAAAAAAAAAAAAA BBBBB
736458376 947883 HHHH GGGGG
800450220 910003 AAAAAAAAAAAAAAAAAA YYYYYYYYYYYYYYYYYYYYYYY

9 位数字(空格)6 位数字(空格)最多 15 个字符(空格)最多 15 个字符

导致:

844388240 920009 XXXXXXXXXX YYYYYYYYYYYYYYY
800450220 910003 AAAAAAAAAAAAAAA BBBBB
736458376 947883 HHHH GGGGG
800450220 910003 AAAAAAAAAAAAAAA YYYYYYYYYYYYYYY

第三列和第四列均被截断为 15 个字符,但较短的值将不受影响地传递。

答案1

一种方法是sed

sed 's/\([^ ]\{15\}\)[^ ]*/\1/g'

同样的事情perl

perl -lpe 's/\S{15}\K\S*//g'

awk

awk '{ for(i=1; i<=NF; i++) $i=substr($i, 0, 15)} 1'

vim

:%s/\v\S{15}\zs\S*//g

cut

tr ' ' '\n' <file.txt | cut -b1-15 | paste -d ' ' - - - -

答案2

sed -r '
s/ /\n/g;
s/^(.{,15}).*$/\1/M3; 
s/^(.{,15}).*$/\1/M4; 
s/\n/ /g
' file

相关内容