缩短具有前缀的多个模式

问题描述 投票:0回答:2

我使用以下 sed 命令删除除包含模式的匹配之外的所有行:

sed '/orders="Green\|orders="Orange\|orders="Blue/!d'

这可行,但是如何使其更短,以便

orders="
只使用一次?

sed '/orders="["Green","Orange","Blue"]/!d'

这样的东西匹配括号之间的所有字符, 但忽略了整个单词。

bash shell sed
2个回答
0
投票

sed
行选择使用正则表达式,默认情况下,如果没有
-E
/
-r
选项,则使用基本风味

您要使用的是群组 -

\(regexp\)

所以像这样:

sed '/orders="\(Green\|Orange\|Blue\)/!d'

0
投票

这可行,但是如何使其更短,以便 order=" 只使用一次?

在组内进行轮换。 您的想法是正确的,但正则表达式语法错误。 这就是你想要的:

sed '/orders=("Green"\|"Orange"\|"Blue")/!d'

但是,由于该模式表明您可能正在尝试匹配 XML,因此我觉得有义务建议您应该使用一个bona fide XML 解析器,也许是一个合并到 XSLT 处理器中的解析器,如果您确实这样做的话.

© www.soinside.com 2019 - 2024. All rights reserved.