45

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

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

我想结束

column1, column2, column3
one,     two,     three

我无法更改初始 CSV 输出。

任何标准命令都可以。重要的是文件被编辑到位,并且在文件的开头插入了行。

4

8 回答 8

72

要回答您最初的问题,以下是使用 sed 的方法:

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

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

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

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

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

于 2009-01-28T17:14:42.653 回答
38

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

echo 'your_custom_escaped_content' > temp_file.csv
cat testfile.csv >> temp_file.csv
mv temp_file.csv testfile.csv
于 2009-01-28T15:21:57.217 回答
14

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

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

编辑:要添加到文件中,请尝试以下操作:

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

我通过快速谷歌搜索找到了这个。

于 2009-01-28T14:57:44.613 回答
9

据我了解,您想column1, column2, column3在现有的one, two, three.

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

命令:

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

应该做的工作。

perl -i也值得一看。

于 2009-01-28T15:10:06.087 回答
3

sed 是基于行的,所以我不确定您为什么要使用 sed 来执行此操作。范式更多的是一次处理一行(您也可以通过编程方式找到 CSV 中的字段数并使用 awk 生成标题行)为什么不只是

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

?

于 2009-01-28T15:00:53.607 回答
1

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

perl -i.bk -pe 's/^/column1, column2, column3\n/ if($.==1)' testfile.csv  
于 2009-01-28T15:28:31.993 回答
1

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

cat <(echo "blablabla") input_file.txt > tmp_file.txt
mv tmp_file.txt input_file.txt
于 2011-11-08T05:00:20.943 回答
0

如何在文件中添加行

sed -i -e "48r../../../../folder1/lines_to_add.txt" a.txt 

a.txt - 您要更改的文件 48r 是 a.txt 的行号 有些行在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"
于 2021-06-09T16:43:26.740 回答