使用sed添加N次空间

时间:2015-01-24 18:35:21

标签: awk sed

图案: 玛丽每天和她的孩子一起在公园散步

sed 's/$/ /'

将使其在末尾添加1个空格(尾随)

我想添加X($ VARIABLE)个空格(来自RANDOM)

即。 变量= '14' 然后它会做:

sed 's/$/              /'

=最后添加了14个空格.....

如何做到这一点?

我尝试添加unicode xA0,但它无法正常工作

谢谢!

7 个答案:

答案 0 :(得分:1)

尝试类似:

sed "/$/i $(printf '%.0s-' {0..14})" myfile.txt

答案 1 :(得分:1)

由于此帖子已标记为awk,因此这是一个awk解决方案:

awk -v "count=$VARIABLE" '{for (n=1;n<=count;n++)$0=$0" "} 1'

此解决方案利用了awk本机定义和操作算术变量的能力,这是sed缺乏的功能。

如何运作

  • -v "count=$VARIABLE"

    这会将awk变量count设置为shell变量VARIABLE的值。

  • for (n=1;n<=count;n++)$0=$0" "

    这会在行count次的末尾添加一个空格。

  • 1

    这是神秘的简写,意味着打印线。 (更明确的版本是{print $0}。)

答案 2 :(得分:1)

NSpace=15

sed "1 {x
:pre
   s/^/ /
   / \\{${NSpace}\\}/ !b pre
   x
   }
G;s/\n//" YourFile

posix sed版本。与awk,perl甚至bash脚本相比,更有趣而不是高效

答案 3 :(得分:0)

如果您对开放:

$ echo ok |
    perl -Mutf8 -CS -pe 's/$/sprintf "%s", (chr oct "0x2009") x (int(rand 10)) . "x"/e'

输出:

ok        x

管道od -c

0000000   o   k 342 200 211 342 200 211   x  \n
0000012

答案 4 :(得分:0)

Bash:利用printf的*宽度说明符

$ n=15
$ printf -v spaces '%*s' $n " "
$ echo ">$spaces<"
>               <

与awk类似

$ spaces2=$(awk -v n=$n 'BEGIN {printf "%*s", n, " "}')
$ echo ">$spaces2<"
>               <

然后你可以在你的sed调用中使用这个空格字符串(或者决定你根本不需要sed,那部分不清楚)

答案 5 :(得分:0)

我的awk解决方案看起来更像是这样:

awk -v num=14 '{printf("%s%"num"s\n", $0, "")}' input.txt

当然,如果你有有趣的行结尾,可能需要进行调整。

它的工作原理是使用printf格式,该格式具有固定大小的第二个字段,其大小是使用num选项插入到awk脚本中的-v变量指定的。如果您使用此功能,请确保num实际上是一个数字,或者您打破了格式。

答案 6 :(得分:0)

如果你可以使用perl试试这个:

perl -pe '$char=" "; $n=14; $str="$char"x$n; s/$/$str/'

在行动中(为了更好的可视化,我将$ char设置为“。”):

perl -pe '$char="."; $n=14; $str="$char"x$n; s/$/$str/' <<< 'abc' 
abc..............