到目前为止,我已经能够找出如何在文件的开头添加一行,但这并不完全是我想要的。我将用一个例子来说明:

文件内容

some text at the beginning

结果

<added text> some text at the beginning

它很相似,但是我不想用它创建任何新的行…

如果可能的话,我希望用sed来做这件事。


当前回答

使用echo方法,如果你像我一样使用macOS/BSD,就不要像其他人建议的那样使用-n开关。我喜欢为文本定义一个变量。

所以它是这样的:

Header="my complex header that may have difficult chars \"like these quotes\" and line breaks \n\n "

{ echo "$Header"; cat "old.txt"; } > "new.txt"
mv new.txt old.txt

其他回答

echo -n "text to insert " ;tac filename.txt| tac > newfilename.txt

第一个tac反向传输文件(最后一行先传输),因此“要插入的文本”出现在最后。第2个tac再次将其换行,因此插入的行位于开头,原始文件保持原始顺序。

使用echo方法,如果你像我一样使用macOS/BSD,就不要像其他人建议的那样使用-n开关。我喜欢为文本定义一个变量。

所以它是这样的:

Header="my complex header that may have difficult chars \"like these quotes\" and line breaks \n\n "

{ echo "$Header"; cat "old.txt"; } > "new.txt"
mv new.txt old.txt

我的观点是:

sed  -i '1i /path/of/file.sh' filename

即使字符串中包含正斜杠"/"

如果你想在文件的开头添加一行,你需要在上面的最佳解决方案中在字符串的末尾添加\n。

最好的解决方案是添加字符串,但是使用字符串,它不会在文件的末尾添加一行。

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

我找到的最简单的解决方法是:

echo -n "<text to add>" | cat - myFile.txt | tee myFile.txt

注:

Remove | tee myFile.txt if you don't want to change the file contents. Remove the -n parameter if you want to append a full line. Add &> /dev/null to the end if you don't want to see the output (the generated file). This can be used to append a shebang to the file. Example: # make it executable (use u+x to allow only current user) chmod +x cropImage.ts # append the shebang echo '#''!'/usr/bin/env ts-node | cat - cropImage.ts | tee cropImage.ts &> /dev/null # execute it ./cropImage.ts myImage.png