从以下文本中查找用户(突出显示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/
) 下用空白 ( ) 替换匹配项。