【发布时间】:2020-07-12 12:20:55
【问题描述】:
我有一个有 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 行。
我不确定错误是什么。我该如何解决?
【问题讨论】:
-
所以你从文件中删除了一行,就地,现在它少了一行。我没有看到问题。将第二个
sed更改为命中行108。 -
请注意,在
i之后指定字符串是 GNU-sedism 而不是 POSIX 标准。您应该有一个反斜杠换行符,然后是字符串。如果您希望在最后一行之后有新行,请使用$选择行号。您可以使用sed -i -e '74d' -e '$aThis is the string' Test.txt在一个命令中执行这两项操作。 (另外,使用不带后缀的-i是另一种GNU-sedism。使用-i可以在BSD (macOS) 房间中使用,但前提是您指定了备份后缀——-i.bak可以同时使用两者。)注意在你知道你的脚本工作之前使用-i是危险的——它有丢失文件的风险。 -
@JNevill 由于某些原因,当我使用 108 时,它会将其添加到 108,但将 108 条目移动到第 109 行。它仍然不起作用
-
所以你想在最后一行之后追加,而不是在它之前插入 -
i是插入(之前);a是附加(之后)。