我正在尝试找到一种方法来注释配置文件中的块(多行)。我想匹配第一行,但也对之后的每一行进行操作。
sed '/\/Some\/Foo\/Bar\/String/' config.file
以下示例“代码”是我尝试匹配和注释掉的内容。该块总是以 } 结尾,但我也知道模式匹配后的行数,因此这将是模式行 + 6。
foo { '/Some/Foo/Bar/String' :
key1 => value1,
key2 => value2,
key3 => value3,
key4 => value4,
key5 => value5,
}
sed 命令后的结果
#foo { '/Some/Foo/Bar/String' :
# key1 => value1,
# key2 => value2,
# key3 => value3,
# key4 => value4,
# key5 => value5,
#}
答案1
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,
#}
细节
\|/Some/Foo/Bar/String|, /}/
这定义了范围。它可以写成
/\/Some\/Foo\/Bar\/String/, /}/
但是,为了避免反斜杠,我使用|
代替/
第一个正则表达式作为分隔符。s/^/#/
这仅适用于范围内的行并将其注释掉。