图案: 玛丽每天和她的孩子一起在公园散步
sed 's/$/ /'
将使其在末尾添加1个空格(尾随)
我想添加X($ VARIABLE)个空格(来自RANDOM)
即。 变量= '14' 然后它会做:
sed 's/$/ /'
=最后添加了14个空格.....
如何做到这一点?
我尝试添加unicode xA0,但它无法正常工作
谢谢!
答案 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)
如果您对perl开放:
$ 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..............