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

文件内容

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"

其他回答

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

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

sed -i '1s/^/your text\n/' 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

进行就地编辑。

在文件顶部添加一行:

sed -i '1iText to add\'

别名是另一种解决方案。添加到你的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"

Cat连接多个文件。<()将命令的输出作为文件发送。结合这两者,我们可以在文件的开头和结尾插入行,

cat <(echo "line before the file") file.txt <(echo "line after the file")