当我申请sed -i -e "s/..\///" -e "s/type_properties\///" testfile
以下文件时:
#include "../../../../include/concepts/type_properties/operations/has_or_op_v.hpp"
int main() {
// Test has_not_op_v.
}
它输出这个:
#include "../../../include/concepts/operations/has_or_op_v.hpp"
int main() {
/ Test has_not_op_v.
}
我只是想 sed 删除一个../
并 delete type_properties/
,但这也破坏了我的注释。
该字符
.
是一个元字符。这意味着它具有特殊的含义。.
表示“匹配任何单个字母或字符”。您只想匹配文字.
字符。如果您更改
.
为\.
,您将获得正确的输出。例子:
变成:
首先,不要
sed -i
在测试时使用。不-i
先运行并检查结果。当您知道它看起来正确时,然后添加-i
以将更改提交到文件中。原因
sed
似乎比要求做的更多,因为main()
函数中的注释与您的两个表达式中的第一个匹配..\/
(两个字符和一个斜杠)。如果您知道您只想将更改应用于以 开头的行
#include
,那么您可以使用在这里,这两个替换仅在以 string 开头的行上执行
#include
。我还正确地转义了第一个表达式中的两个点,以便它们匹配点,而不是“任何字符”。由于我们匹配的文本包含斜杠,因此我还选择%
在s
命令中使用替代分隔符 ,。