【发布时间】:2015-07-13 12:11:46
【问题描述】:
如果我想在文件的第 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
感谢您的帮助!!!
【问题讨论】:
-
sed -ie表示sed将通过将扩展名e添加到原始文件名来为您创建备份文件。没有正式错误,但非常难以置信。你的空字符串''是一个空的sed脚本;这后面是一个“文件名”,例如3/^/something/g,它可能不存在,然后是final.txt。 Shell 有一个完全可行的elif,应该使用它。fi之后的分号是不必要的。如果您包含一对简短的样本输入(原始输入,似乎是length.txt和final.txt,加上预期的输出,这将无济于事。 -
对不起,我删除了原始代码,以便我可以坚持线程的原始上下文。我会尝试 elif 看看会发生什么。
-
elif是(曾经)风格,不是实质性的。您可以使用elif ... then; ...; fi代替else if ... then; ...; fi; fi;— 它减少了fi的数量和缩进量。 -
感谢 sed -ie 的评论。我没有尝试进行备份。我试图调用 -i 和 -e。
-
在 Mac 上,
-i选项需要备份后缀,可以是空字符串:-i.bak或-i .bak或-i ''(但不是-i'')。使用-i -e '…'将为您提供扩展名为-e的备份。请注意,GNUsed对-i有不同的语义;使用-i.bak为您提供带有.bak扩展名的备份;-i本身意味着没有扩展的备份。如果脚本要在 Mac 和 GNUsed上运行,则必须使用-i.bak以使脚本可靠运行(.bak的拼写由您选择,但必须存在且非空)。 (我的意思是:外壳 对间距很挑剔)。