在 shell 脚本中使用 sed 向文件添加一行

Adding a line to a file using sed in a shell script

我有一个包含 109 行的文件。

我在如下所示的行中执行了两个操作。

# Delete line 74
sed -i '74d' Test.txt

# Add the entry to line 109
  sed -i "109iThis is the string" Test.txt

我看到第 74 行从我的 Test.txt 中删除,但由于某些原因,现在我的 Test.txt 只有 108 行,而且我没有看到添加 This is the string到第 109 行。

我不确定错误是什么。我该如何解决?

如果删除一行,文件只剩下 108 行。相应地更正您的第二个命令:

sed -i "108iThis is the string" Test.txt

第 109 行不存在(你删除了一个,109-1=108),你必须添加它才能输入文本。

解决方法: sed -i '$ a <text>' Test.txt 新行将添加所选文本。

您可以使用此 POSIX sed 命令:

sed -i.bak '74d; $ a\
This is the string
' file

这将从文件中删除第 74 行并在末尾追加一行并将内联保存更改。

请注意,这也适用于 gnu-sed

Jonathan 已经提到了使用 sed -i 的潜在问题(非标准,在支持时以不同的方式表现,具体取决于实施等)。通过使用 ed 编辑文件来避免它们:

ed -s Test.txt <<EOF
109a
This is the string
.
74d
w
EOF

注意这是如何追加和删除的。因为 ed 作用于整个文件,而不是行流,作用于特定行的命令可以是任何顺序。