1

如何将字符串插入到最后一行的开头?

我想在包含多行的文本文件中添加时间戳

var1 = `date`

LINE1
LINE2
LINE3
...
(INSERT var1 here) LASTLINE

sed 's/^/test line /g' textfile将字符插入每行的开头,但我怎样才能专门修改最后一行?

谢谢

前进: sed '$s/^/sample text /' textfile有效,但仅在插入常规字符串时。如果我尝试

var1 = "sample text"

并使用替代,这是我遇到的问题

  1. 在 sed 中使用单引号不会扩展变量,因此 sed '$s/^/$var1/' 文本文件会将字符串 $var1 插入到最后一行的开头。

  2. 为了启用变量替换,我尝试使用双引号。当我指定确切的行号时它会起作用。就像是:

    sed "5s/^/$var1/" 文本文件

但是当我尝试时sed "$s/^/$var1" text file,它返回一个错误:

sed:-e 表达式#1,字符 5:命令后的额外字符

有人能帮助我吗?

4

4 回答 4

5

像这样:

sed '$s/^/test line /' textfile

$表示最后一行。同样,您可以通过将行号代替$

于 2013-11-07T05:01:06.697 回答
1
But when I try sed "$s/^/$var1" text file, it returns an error: 

它返回一个错误,因为你使用了双引号, shell试图扩展。你$s需要逃避$in 。$s

sed "\$s/^/$var1/" filename
于 2013-11-07T06:09:33.667 回答
0

sed应该是最好的工具,但awk也可以这样做:

awk '{a[++t]=$0} END {for (i=1;i<t;i++) print a[i];print v$0}' v="$var1" file

它将var1在最后一行的前面插入值


另一种变化

awk 'NR==f {$0=v$0}1' v="$var1" f=$(wc -l file)

PS你不需要在之后指定文件awk,不知道为什么。如果你这样做,它会读双倍。

于 2013-11-07T06:50:41.960 回答
0

这个命令对你有用:

sed -i "5s/^/$var1 /" text file
于 2013-11-08T14:18:51.240 回答