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

时间:2009-01-28 14:53:19

标签: linux shell sed

我想在现有的CSV文件中添加一行标题,然后进行编辑。我怎么能这样做?

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

我希望最终得到

column1, column2, column3
one,     two,     three

更改初始CSV输出不在我手中。

任何标准命令都可以。重要的是文件在适当的位置编辑,并在文件的开头插入行。

8 个答案:

答案 0 :(得分:68)

要回答您的原始问题,请按以下步骤操作:

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

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

-i选项使文件“就地”编辑,并且还可以使用可选参数来创建备份文件,例如

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

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

答案 1 :(得分:33)

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

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

答案 2 :(得分:10)

这不使用sed,而是使用>>将附加到文件。例如:

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

修改:要预先添加到文件中,请尝试以下操作:

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

我通过快速Google search找到了这个。

答案 3 :(得分:8)

据我了解,您希望将column1, column2, column3添加到现有的one, two, three

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

命令:

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

应该做的工作。

perl -i值得一看。

答案 4 :(得分:3)

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

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

答案 5 :(得分:1)

使用perl -i,使用一个命令将第1行的开头替换为要插入的内容(.bk将具有备份原始文件的效果):

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

答案 6 :(得分:1)

使用两个命令在文件开头添加给定行:

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

答案 7 :(得分:0)

如何在文件中添加一行

sed -i -e "48r../../../../folder1/lines_to_add.txt" a.txt 
<块引用>

a.txt - 要更改的文件 48r 是 a.txt some 的行号 行在lines_to_add.txt文件中

../../../../scripts3_2d/lines_to_add.txt 
<块引用>

-i 更新a.txt,运行代码前尝试不使用-i,注意换行,

"keep a newline at the end of lines_to_add.txt"