我有一个产生输出文件的外部程序(可能有20K行)。
我需要在现有的第1行和第2行之间插入新的行。做这个。
我有一个产生输出文件的外部程序(可能有20K行)。
我需要在现有的第1行和第2行之间插入新的行。做这个。
Answers:
awk 'NR==1{print; print "new line"} NR!=1'
对于您的特定情况,这应该更简单:
sed '1 { P ; x }' your-file
说明:在第1行,执行以下操作
然后,在循环中再次打印该行(现在为空)。
如果您想添加新行而不是新行字符(据我最初的理解),则只需使用sed
的命令a\
(追加):
sed '1 a\
appended line' your-file
甚至
sed '1 aappended line' your-file
它appended line
在第1行之后附加“ ”。
sed -i '1 a\\' file
只换行。
'1 aapended line'
例子是它的唯一缺点是它是GNUism 。
我想sed
方法是:
sed '2 i whatever_line_of_text_you_wanted_to_INSERT' filename.txt
这将使文本进入文件的第二行,然后文件中实际的第二行将变为第三行。
请注意,如果必须使用append模式,则必须使用第一行,因为追加将在指定的行号之后进行。
sed '1 a whatever_line_of_text_you_wanted_to_INSERT' filename.txt
sed ':a;N;$!ba;s/\n/\n\n\n/' yourBigFile
这可能对您有用:
sed 1G file
如果要something
在换行符后插入:
sed '1{G;s/$/something/}' file
或者,如果sed处理\n
:
sed '1s/$/\nsomething/' file
当然a
更容易了:
sed '1a something' file
\n
!
我通常ed
为此使用:
(echo 1a; echo 'Line to insert'; echo .; echo w) | ed - filename
类似于sed
解决方案,但没有换行符的混乱。
echo
,尤其是在bash
:ed - filename <<< $'1a\nLine to insert\n.\nw'
。
dash
在许多系统上都是/bin/sh
。
echo
”。不放过所有 echo
的确实是bash
唯一的功能,但减少了echo
4至1作品计数dash
和ksh
也:echo '1a\nLine to insert\n.\nw' | ed - filename
。
Python解决方案
python -c "import sys; lines = sys.stdin.readlines(); lines.insert(1,'New Line\n'); print ''.join(lines).strip()" < input.txt
我会为此使用python
import fileinput
for linenum,line in enumerate(fileinput,FileInput("file",inplace=1)):
if linenum ==1:
print ""
print line.rstrip()
else:
print line.rstrip()`
上面的答案均未提及如何将更改保存到原始文件,这是我认为OP要求的。
当我浏览页面时,这当然是我所需要的。
因此,假设您的文件名为 output.txt
sed -i '1 a This is the second line' output.txt
我的特殊用例是将xsl样式表声明自动添加到junit xml文件中。
sed -i '1 a <?xml-stylesheet type="text/xsl" href="junit-html.xsl"?>' junit.xml
awk 'NR==2 {print "new line"} 1'