我使用以下 sed 命令删除除包含模式的匹配之外的所有行:
sed '/orders="Green\|orders="Orange\|orders="Blue/!d'
这可行,但如何使它更短以便orders="
只使用一次?
sed '/orders="["Green","Orange","Blue"]/!d'
类似这样的内容会匹配括号之间的任意字符,但会忽略整个单词。
我使用以下 sed 命令删除除包含模式的匹配之外的所有行:
sed '/orders="Green\|orders="Orange\|orders="Blue/!d'
这可行,但如何使它更短以便orders="
只使用一次?
sed '/orders="["Green","Orange","Blue"]/!d'
类似这样的内容会匹配括号之间的任意字符,但会忽略整个单词。
sed
行选择使用正则表达式,默认情况下,如果不使用-E
/-r
选项,则使用Basic 风格。您想要使用的是群组 -
\(regexp\)
像这样:
在组内执行交替。你的想法是正确的,但正则表达式语法是错误的。这是你想要的:
但是,由于该模式表明您可能正在尝试匹配 XML,因此我有义务建议您使用真正的XML 解析器,也许是合并到 XSLT 处理器中的解析器,如果这确实是您正在做的事情的话。