如何在shell脚本中添加一行到文件中?

我想将一行标题添加到现有的CSV文件中,进行编辑。 我怎样才能做到这一点?

echo 'one, two, three' > testfile.csv 

我想结束

 column1, column2, column3 one, two, three 

(改变最初的CSV输出不在我手中)

编辑:我最初有这个'使用sed',但任何标准的命令会做。 重要的是文件被编辑到位,并且该行被插入到文件的开头。 谢谢,

这会在文件的开头添加自定义文本:

 echo 'your_custom_escaped_content' > temp_file.csv cat testfile.csv >> temp_file.csv mv temp_file.csv testfile.csv 

回答你原来的问题,这里是你如何使用sed来做到这一点:

 sed -i '1icolumn1, column2, column3' testfile.csv 

“1i”命令告诉sed转到第1行并在那里插入文本。

-i选项使文件“就地”编辑,也可以采用可选参数来创建备份文件

 sed -i~ '1icolumn1, column2, column3' testfile.csv 

将原始文件保存在“testfile.csv〜”中。

据我所知,你想要在现有的one, two, three上加上one, two, three

我会使用ed代替sed ,因为sed在标准输出上写入,而不是在文件中。

命令:

 printf '0a\ncolumn1, column2, column3\n.\nw\n' | ed testfile.csv 

应该做的工作。

perl -i也值得一看。

这不使用sed,但使用>>将附加到一个文件。 例如:

 echo 'one, two, three' >> testfile.csv 

编辑 :要添加到文件,尝试这样的事情:

 echo "text"|cat - yourfile > /tmp/out && mv /tmp/out yourfile 

我通过快速的Google搜索找到了这个。

sed是基于行的,所以我不知道你为什么要用sed来做这个。 这个范例是一次更多的处理一行(你也可以编程的方式找到CSV中的字段并用awk生成你的标题行)为什么不只是

 echo "c1, c2, ... " >> file cat testfile.csv >> file 

使用perl -i,用你想要插入的命令替换第一行的开头(.bk将会有你的原始文件被备份的效果):

 perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv 

在两个命令的文件开头添加一个给定的行:

 cat <(echo "blablabla") input_file.txt > tmp_file.txt mv tmp_file.txt input_file.txt