我想使用正则表达式从类似 json 格式的文本文件中查找一个用户。使用正则表达式查找用户并将其与周围文本一起删除

我想使用正则表达式从类似 json 格式的文本文件中查找一个用户。使用正则表达式查找用户并将其与周围文本一起删除

从以下文本中查找用户(突出显示testUser

define name{

        name                            **testUser**

        aliasName                       Test User

        emailID                         [email protected]

        use                             not used

        }

define name{

        name                            testUser111
        aliasName                       Test User111
        emailID                         [email protected]
        use                             not used
        }

从整个文件中删除上述用户(testUser)后,输出将如下所示:

define name{

        name                            testUser111

        aliasName                       Test User111

        emailID                         [email protected]

        use                             not used
        }

我尝试了下面的正则表达式,但它从文件中选择了所有用户。我对正则表达式还不熟悉。

\bdefine name\s*\{\s*[\s\S]*?\s*}

我知道以下答案sed -i '/${DATA}/d' test.txt- 命令将从文件中删除提供的数据并更新它。

请提出建议。

答案1

如果我理解正确,并且您想要获得用户的完整定义,那么name testUser这应该有效,例如:

define name\s*{\s*name\s+testUser\b[^}]*}

它查找name字段,然后匹配testUser紧挨着它的用空格分隔的单词。然后它查找任何不是 a 的内容,}并结束于}

在 Bash 中使用多行匹配的最简单方法可能是 Perl:

perl -0777 -i -pe "s/define name\s*{\s*name\s+testUser\b[^}]*}//g" test.txt

-0777开关指定应将其视为单行。它//在替换模式 ( s/) 下用空白 ( ) 替换匹配项。

相关内容