使用 sed 格式化字符串

使用 sed 格式化字符串

如何使用 sed 将以下输入字符串格式化为输出字符串?

中心字符串应从第 20 个字符开始,结束字符串应从第 40 个字符开始。

输入:

begining center end     
beg12  cen12  end12
beg13 cen  end

输出:

begining     center      end     
beg12        cen12       end12
beg13        cen         end

答案1

awk可以用它的printf()函数来格式化这些数据。

$ awk '{ printf("%-20s%-20s%s\n", $1, $2, $3) }' data.in
begining            center              end
beg12               cen12               end12
beg13               cen                 end

这假设文件中的数据是用空格分隔的。

给它列宽作为参数:

$ cols=40
$ awk -v c="$cols" 'BEGIN { fmt=sprintf("%%-%ds%%-%ds%%s\n", c, c) } { printf(fmt, $1, $2, $3) }' data.in
begining                                center                                  end
beg12                                   cen12                                   end12
beg13                                   cen                                     end

答案2

这是我不会使用sed,我会使用的场合之一printf,特别是
%-Ns用空格填充字符串直到“字段”占据最少N字符的格式

#!/usr/bin/env bash

while read first second third
do
    printf "%-20s%-20s%s\n" "$first" "$second" "$third"
done <<- 'EOF' 
    begining center end     
    beg12  cen12  end12
    beg13 cen  end
EOF

答案3

awk方法:

awk '{printf("%-20s%-20s%-20s\n",$1,$2,$3)}' file

输出:

begining            center              end                 
beg12               cen12               end12               
beg13               cen                 end 

答案4

< yourfile tr -s '\t ' '\t\t' | expand -t 19,39

结果

         1         2         3         4         5
12345678901234567890123456789012345678901234567890
begining           center              end
beg12              cen12               end12
beg13              cen                 end

在职的

  • 首先,我们将所有剩余空间和/或制表符挤出到制表符。
  • 然后我们通过使用选项并列出制表符位置来expand对结果应用命令。-t

相关内容