我试图找到一种方法来注释掉配置文件中的块(多行)。我想匹配第一行,但之后也对每一行进行操作。
sed '/\/Some\/Foo\/Bar\/String/' config.file
Run Code Online (Sandbox Code Playgroud)
以下示例“代码”是我试图匹配和注释掉的内容。该块将始终以 } 结尾,但我也知道模式匹配后的行数,因此这将是模式行 + 6。
foo { '/Some/Foo/Bar/String' :
key1 => value1,
key2 => value2,
key3 => value3,
key4 => value4,
key5 => value5,
}
Run Code Online (Sandbox Code Playgroud)
sed 命令后的结果
#foo { '/Some/Foo/Bar/String' :
# key1 => value1,
# key2 => value2,
# key3 => value3,
# key4 => value4,
# key5 => value5,
#}
Run Code Online (Sandbox Code Playgroud)
sed
允许我们定义行的范围,然后仅在这些范围内应用替换。我们可以定义一个以包含行开始并以包含行Some/Foo/Bar/String
结束的范围}
,然后应用替换命令来注释掉这些行:
$ sed '\|/Some/Foo/Bar/String|,/}/ s/^/#/' file
#foo { '/Some/Foo/Bar/String' :
# key1 => value1,
# key2 => value2,
# key3 => value3,
# key4 => value4,
# key5 => value5,
#}
Run Code Online (Sandbox Code Playgroud)
\|/Some/Foo/Bar/String|, /}/
这定义了范围。它可以写成/\/Some\/Foo\/Bar\/String/, /}/
但是,为了避免反斜杠,我用|
作为分隔符来代替/
第一个正则表达式。
s/^/#/
这仅适用于范围内的行,并将它们注释掉。