如何在文件的开头插入文本?

到目前为止,我已经能够find如何在文件的开头添加一行,但这不完全是我想要的。 我会用一个例子来展示它

文件内容

some text at the beginning 

结果

 <added text> some text at the beginning 

这是相似的,但我不想创build任何新的线路…

如果可能,我想用sed来做。

sed可以在一个地址上运行:

 $ sed -i '1s/^/<added text> /' file 

在这里的每一个答案你看到这个神奇的1s是什么? 线寻址! 。

想要在前10行添加<added text>

 $ sed -i '1,10s/^/<added text> /' file 

或者你可以使用Command Grouping

 $ { echo -n '<added text> '; cat file; } >file.new $ mv file{.new,} 

如果该文件只有一行,则可以使用:

 sed 's/^/insert this /' oldfile > newfile 

如果它不止一行。 之一:

 sed '1s/^/insert this /' oldfile > newfile sed '1,1s/^/insert this /' oldfile > newfile 

我已经包括了后者,所以你知道如何做线的范围。 这两个都会将其受影响的行上的起始行标记replace为要插入的文本。 你也可以(假设你的sed足够现代)使用:

 sed -i 'whatever command you choose' filename 

做就地编辑。

如果要在文件的开始处添加一行,则需要在上面最佳解决scheme的string末尾添加\n

最好的解决scheme将添加string,但与string,它不会在文件的末尾添加一行。

 sed -i '1s/^/your text\n/' file 

你可以使用cat -

 printf '%s' "some text at the beginning" | cat - filename 

只插入换行符:

 sed '1i\\' 

请注意,在OS X上, sed -i <pattern> file失败。 但是,如果您提供了一个备份扩展, sed -i old <pattern> file ,则在创buildfile.old同时file被修改。 然后,您可以删除脚本中的file.old

嗨与回车:

 sed -i '1s/^/your text\n/' file 
 echo -n "text to insert " ;tac filename.txt| tac > newfilename.txt 

第一个tac将文件倒退(最后一行),所以最后出现“要插入的文本”。 第二个tac再次包装它,所以插入的行在开始和原始文件是在它的原始顺序。

问题:使用父目录的基本名称在文件的顶部标记一个文件。

解决scheme1 – 非空文件:

 bn=${PWD##*/} ## bn: basename sed -i '1s/^/'"$bn"'\n/' <filename> 

解决scheme2a – 空文件:

 ## sed fails on empty files; solution: printf "${PWD##*/}\n" >> <filename> 

解决scheme2b – recursion目录:

 for file in *; do printf "${PWD##*/}\n" >> $file; done 

要点: https //gist.github.com/victoriastuart/7457b2727d21a37b7a79eb9a957b988d

要将一行添加到文件的顶部,请执行以下操作:

 sed -i '1iText to add\'