SED:如何将字符串插入最后一行的开头

时间:2013-11-07 04:54:20

标签: linux bash sed insert

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

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

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 /'textfile会将字符串$ var1插入到最后一行的开头。

  2. 要启用变量替换,我尝试使用双引号。当我指定确切的行号时,它可以工作。类似的东西:

    sed“5s / ^ / $ var1 /”textfile

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

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

    有人能帮助我吗?

4 个答案:

答案 0 :(得分:5)

像这样:

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

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

来插入任何特定行

答案 1 :(得分:1)

But when I try sed "$s/^/$var1" text file, it returns an error: 

它返回错误,因为 shell 尝试展开$s,因为您使用了双引号。您需要转义 $中的$s

sed "\$s/^/$var1/" filename

答案 2 :(得分: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之后指定文件,不知道为什么。如果你这样做,它会把它读成双倍。

答案 3 :(得分:0)

此命令适用于您:

sed -i "5s/^/$var1 /" text file