Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在shell脚本中向文件添加行?_Linux_Shell_Sed - Fatal编程技术网

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

Linux 如何在shell脚本中向文件添加行?,linux,shell,sed,Linux,Shell,Sed,我想将一行标题添加到现有的CSV文件中,就地编辑。我该怎么做 echo 'one, two, three' > testfile.csv 我想和你在一起 column1, column2, column3 one, two, three 我无法更改初始CSV输出 任何标准命令都可以。重要的是文件被就地编辑,并且行被插入文件的开头。这不使用sed,但使用>>将附加到文件中。例如: echo 'one, two, three' >> testfile.csv

我想将一行标题添加到现有的CSV文件中,就地编辑。我该怎么做

echo 'one, two, three' > testfile.csv
我想和你在一起

column1, column2, column3
one,     two,     three
我无法更改初始CSV输出


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

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

echo 'one, two, three' >> testfile.csv
编辑:要在文件前添加前缀,请尝试以下操作:

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

我通过一个快速的测试发现了这一点。

sed是基于行的,所以我不确定您为什么要使用sed来实现这一点。这个范例更多的是一次处理一行(您也可以通过编程在CSV中找到字段的#并使用awk生成标题行)为什么不

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

据我所知,您希望在现有的
一、二、三
之前添加
列1、列2、列3

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

命令:

printf '0a\ncolumn1, column2, column3\n.\nw\n' | ed testfile.csv
我应该做这项工作


perl-i
也值得一看。

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

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

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


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

sed -i '1icolumn1, column2, column3' testfile.csv
“1i”命令告诉sed转到第1行并在那里插入文本

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

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

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

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

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

如何在文件中添加行

sed -i -e "48r../../../../folder1/lines_to_add.txt" a.txt 
a、 txt-您要更改的文件48r是a.txt的行号 行位于\u至\u add.txt文件的行内

-我更新a.txt,在运行代码之前尝试不使用-i,小心新行


您好,这将添加到文件的末尾-我需要它在开头-已经澄清了问题…Unix的哪个版本?这在Mac OS X Leopard上不起作用,它被认证为“单一UNIX规范V3”。我使用Linux。显然,BSDSED(包括OSX)需要一个-i参数(并且应该像普通参数一样分开)。尝试将命令替换为“sed-i'~'…”。如果行得通,我会修改答案。谢谢。我怀疑这一点,但后来我没能让I命令起作用。我尝试了内联命令(不带或带-e)和脚本命令(带-f),但得到了:sed:rename():不是目录。你不需要编辑答案,只要它对提问者有帮助。很好,但我认为你应该注意“1i”部分,除非你知道sed,否则它并不明显。我认为这应该是问题的正确答案,因为你没有复制文件或制作临时文件,如果您有一个大文件,这将起作用。这对于所有shell语言来说都更通用
sed -i -e "48r../../../../folder1/lines_to_add.txt" a.txt 
../../../../scripts3_2d/lines_to_add.txt 
"keep a newline at the end of lines_to_add.txt"