在 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
作用于整个文件,而不是行流,作用于特定行的命令可以是任何顺序。
我有一个包含 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
作用于整个文件,而不是行流,作用于特定行的命令可以是任何顺序。