如何将字符串插入最后一行的开头?
我想在包含多行的文本文件中添加时间戳
var1 = `date`
LINE1
LINE2
LINE3
...
(INSERT var1 here) LASTLINE
sed 's/^/test line /g' textfile
将字符插入每行的开头但是如何才能专门修改最后一行呢?
由于
前进:
sed '$s/^/sample text /' textfile
有效,但仅在插入常规字符串时才有效。如果我试试
var1 = "sample text"
并使用替代,这是我遇到的问题
在sed中使用单引号不会扩展变量,因此sed'$ s / ^ / $ var1 /'textfile会将字符串$ var1插入到最后一行的开头。
要启用变量替换,我尝试使用双引号。当我指定确切的行号时,它可以工作。类似的东西:
sed“5s / ^ / $ var1 /”textfile
但是当我尝试sed "$s/^/$var1" text file
时,它会返回错误:
sed:-e表达式#1,字符5:命令后的额外字符
有人能帮助我吗?
答案 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