regex - 我找不到可以删除起始行和结束行包含大括号的一组行的正则表达式

标签 regex sed curly-braces

我有许多文件,其中的行以 main 开头,后跟左大括号,并以包含右大括号的行结束。我想删除这些行:

main {
        top:190px;
        margin-left:auto;
        margin-right:auto;
        width:70%
}

我尝试过这样的命令,其中我转义了大括号:

find . -name "*.html" -exec sed -i '/^main.*\{/,/^\}/d' {} +

并收到如下错误消息:

sed: -e expression #1, char 11: Invalid preceding regular expression

当我不转义大括号时,我不会收到错误消息,但不会删除这些行。

我在运行 GNU bash 版本 5.0.3(1)-release (x86_64-pc-linux-gnu) 的系统上使用 GNU sed 版本 4.7

最佳答案

前面的正则表达式无效错误是由您使用的无效正则表达式引起的。由于没有 -E 标志,因此您的 sed 命令将使用 POSIX BRE 正则表达式规则进行解释,并且 \{/\} 用于定义范围量词(也称为限制量词或区间量词)。

因此,您所需要的只是添加 -E 选项,

find . -name "*.html" -exec sed -E -i '/^main.*\{/,/^\}/d' {} +

或者,从 {} 中删除逃逸:

find . -name "*.html" -exec sed -i '/^main.*{/,/^}/d' {} +

参见this online demo .

当然,如果您只需要在 main{ 之间只有空格字符时才匹配 {,请替换 /^main.*{//^main[[:space:]]*{/ (POSIX BRE)。

关于regex - 我找不到可以删除起始行和结束行包含大括号的一组行的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69112689/

相关文章:

regex - 位模式或二进制数据的正则表达式?

python - bash脚本替换html中的空格

ruby - Ruby & Rails 中的大括号 : [Brackets],(圆括号)和 {Curlies}

c - 大括号内的变量声明

javascript - 如何使用 JavaScript 和 RegEx 解析复杂的 BibTex 项目

Java 文本过滤器

python - 如果两列中的名称使用正则表达式匹配,则创建返回 true/false 的新列

sed - 如何删除文件中的重复行...AWK、SED、UNIQ 不适用于我的文件

php - 双引号在 PHP 的 shell_exec 和 sed 中不断被解析

python - 语法错误 : Not a Chance - What is this error?