Answers:
使用sed的insert(i)选项可将文本插入到前一行。
sed '1 i\
问题作者的更新:
为了使其在位编辑文件-使用GNU- sed我必须添加以下
-i选项:
sed -i '1 i\anything' file
也语法
sed -i '1i text' filename
对于非GNU sed
您需要在反斜杠1i\之后和之后立即按回车键first_line_text:
sed -i '1i\
first_line_text
'
还要注意,某些非GNU的sed实现(例如,在macOS上的实现)需要为-iflag提供一个参数(用于-i ''获得与GNU相同的效果sed)。
-i选择就行不通。我会在接受之前更新您的答案。
sed (GNU sed) 4.2.2刚 sed '1 i text to insert' -i file工作就像一个魅力。谢谢
awk下面查看我的不良排名答案。这应该工作。
回声用于获取文本。Cat文件名-在控制台中打印文件,然后>使用文件名将其发送到另一个文件filename1,然后将filename1移至filename,以将文本插入到所需文件的第一行。
(echo "some text" && cat filename) > filename1 && mv filename1 filename
sed -i '1i new_text' file_name
如果不指定该-i选项,则不会显示任何错误,并在标准终端上显示输出,但不会在文件中插入文本。
-i开关。
gnu sed特定的,只是碰巧gnu sed会接受i没有反斜杠的)。如果其他人认为这值得一个单独的答案+赞成...哦,对了。
令我惊讶的是,在这个老问题中,没有人显示出最常见的(在这种情况下非常简单)sed命令:
$ sed -i '1s/^/new_text\
/' file_name
它适用于大多数shell,并且可以移植到多个sed版本。
如果GNU sed可用,则可以使用以下命令:
$ sed -i '1s/^/new_text\n' file_name
不同之处在于GNU sed允许在\n换行符中使用a ,而其他人则需要在换行符前加反斜杠(无论如何在GNU sed中也可以使用)。
如果$'…'正在使用接受语法的外壳,则可以直接插入换行符,因此sed会看到换行符已经存在:
$ sed -i $'1s/^/new_text\\\n/' file_name
适用于sed版本。
不幸的是,上述所有答案(大多数是针对sed)都无法解决,因为它们都替代了第一行。我在Ubuntu 16.04 LTS机器上。这是我的解决方法GNU Awk 4.0.2:
awk '{if(NR==1){$0="NEW_FIRST_LINE"$0; print $0} ;if(NR!=1){print $0}}' file_name
sed答案使用替代词,但不能替代现有的词句。