到目前为止,我已经能够找出如何在文件的开头添加一行,但这并不完全是我想要的。我将用一个例子来说明:
文件内容
some text at the beginning
结果
<added text> some text at the beginning
它很相似,但是我不想用它创建任何新的行…
如果可能的话,我希望用sed来做这件事。
到目前为止,我已经能够找出如何在文件的开头添加一行,但这并不完全是我想要的。我将用一个例子来说明:
文件内容
some text at the beginning
结果
<added text> some text at the beginning
它很相似,但是我不想用它创建任何新的行…
如果可能的话,我希望用sed来做这件事。
当前回答
别名是另一种解决方案。添加到你的init rc/ env文件:
addtail () { find . -type f ! -path "./.git/*" -exec sh -c "echo $@ >> {}" \; }
addhead () { find . -type f ! -path "./.git/*" -exec sh -c "sed -i '1s/^/$@\n/' {}" \; }
用法:
addtail "string to add at the beginning of file"
addtail "string to add at the end of file"
其他回答
如果文件只有一行,你可以使用:
sed 's/^/insert this /' oldfile > newfile
如果它不止一行。之一:
sed '1s/^/insert this /' oldfile > newfile
sed '1,1s/^/insert this /' oldfile > newfile
我已经包括了后者,以便您知道如何进行行范围。这两种方法都用要插入的文本“替换”受影响行的开始行标记。您还可以(假设您的sed足够现代)使用:
sed -i 'whatever command you choose' filename
进行就地编辑。
echo -n "text to insert " ;tac filename.txt| tac > newfilename.txt
第一个tac反向传输文件(最后一行先传输),因此“要插入的文本”出现在最后。第2个tac再次将其换行,因此插入的行位于开头,原始文件保持原始顺序。
有一个非常简单的方法:
echo "your header" > headerFile.txt
cat yourFile >> headerFile.txt
使用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
如果你想在文件的开头添加一行,你需要在上面的最佳解决方案中在字符串的末尾添加\n。
最好的解决方案是添加字符串,但是使用字符串,它不会在文件的末尾添加一行。
sed -i '1s/^/your text\n/' file