在一个大文件中,我需要编辑文本并删除特定范围内的注释。对于这个简化的示例,我们假设范围从 开始_start_
并在 结束_end_
。
我可以使用以下命令毫无问题地编辑文本:
sed -i -r "/_start_/,/_end_/ s/SearchText/ReplaceText/" FileName
请注意以下事项(当然,如果我的任何陈述不准确或误导,请告诉我):
- 我使用
-i
它来编辑“文件名”,而不是写入不同的文件。 - 我使用
-r
它是为了让它识别扩展的正则表达式(上面的简化示例中没有显示,但似乎工作正常)。 - 我使用了双引号,以便它可以正确处理变量(上面的简化示例中也没有显示,但也可以按预期工作)。
上面的命令完全符合我的预期。所以我继续我的过程的第二步:一个非常相似的命令来删除这个范围内的注释行:
sed -i -r "/_start_/,/_end_/ /^#/ d" FileName
但是,这没有任何效果:开头的行#
不会被删除。事实上,当我单独执行这个命令时,我的文件中绝对没有任何内容被更改或删除——无论是在范围内还是其他地方。
在我在这个网站和其他地方的搜索中,我发现了很多关于使用 sed 删除行的说明(我认为我正确遵循的说明)——但没有关于我正在经历的失败。
谁能告诉我我在这里做错了什么?
我对 UNIX/Linux 环境非常陌生,因此我绝对愿意接受有关如何处理该问题的其他建议。但只是为了满足我的挫败感,我很想知道我上面的 sed 命令有什么问题。