如何使用 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