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上的实现)需要为-i
flag提供一个参数(用于-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
答案使用替代词,但不能替代现有的词句。