使用SED修改文件的第n行

时间:2015-07-13 03:14:01

标签: macos sed terminal

如果我想将内容添加到文件的第10行,我该怎么做?

这就是我提出的:

sed -ie '' "10s/^/new_content/g" file.txt

我一直收到消息“没有这样的文件或目录”

另外,如果我想用N + 1替换10,使用变量$ VAR替换new_content,格式是否仍然相同?

VAR= $(cat fileA.txt)
sed -ie '' "`expr $N +1`s/^/$VAR/g" fileB.txt

感谢您的帮助!!!

2 个答案:

答案 0 :(得分:0)

Shell对间距很挑剔:

VAR= $(cat fileA.txt)

您不希望=之后的空格。实际上,除非fileA.txt只有一行,否则您也不希望分配。你必须使用反斜杠等来逃避换行,才能使它工作,这既困难又不必要。

除非您使用的是古董(非POSIX)shell,否则请使用内置算法:

sed -i.bak -e "$(($N + 1))r fileA.txt" fileB.txt

$(($N + 1))有shell评估算术表达式。 rsed读取名为的文件。

  

[1addr]r file
   在下次尝试读取输入行之前,立即将文件内容复制到标准输出。如果由于任何原因无法读取文件,则会以静默方式忽略该文件,并且不会设置错误条件。

答案 1 :(得分:0)

事实证明我需要拆分-i-e

最终结果是:

        sed -i '' -e "10s/^/CONTENT/g" file.txt

或者每次循环时将Ns增加+1:

        sed -i '' -e "$((N + 1))s/^/CONTENT/g" ~/dance/heatlist/prep.txt

我仍然没有想出如何使CONTENT成为变量$ CONTENT