鉴于此流:
[foo] 123 [bar]
[gar] dsa [har] 345
[uf] 88 [gc] 43 [br]
我想用 sed (或其他任何东西)处理这个,所以输出将是:
foo bar
gar har
uf gc br
我试过了cat myfile | sed -e 's/^.*\[//;s/\].*$//'
但它只给了我最后一个例子。
我真正的输入是这样的:
53f42d4 [the contacts are duplicated] Adding support in picking email verified users [https://trello.com/c/663]
3c454b0 [the contacts are duplicated] splitting contact by phone numbers and emails and changing contact model to contain only 1 email [https://trello.com/c/663]
0e63e5b [we should not let a user confirm his email if we have a user with this confirmed email already] better doc [https://trello.com/c/643]
02671b7 [we should not let a user confirm his email if we have a user with this confirmed email already] preventing updating email if already in used by other user [https://trello.com/c/643]
所以我想获得第一行:
the contacts are duplicated https://trello.com/c/663
这会将第一个(开始)方括号内的任何内容与随后的第一个(结束)方括号匹配多次。
描述:
这会为每场比赛添加一个尾随空格。如果必须删除,请在末尾添加删除:
如果您有 GNU grep,这可能会有所帮助(每次捕获一行)。
而且,如果上述方法不起作用,awk 也可以这样做:
awk 也适用于此:使用
[
or]
作为字段分隔符,打印每个偶数字段:使用 sed,我会写
一种惯用的方法是使用环视断言,请参阅例如https://www.regular-expressions.info/lookaround.html,但这些在 sed 中不受支持,仅在符合 PCRE 的正则表达式处理器中支持。
由于 Perl 应该默认在 macOS 上可用,也许这是一个可行的替代方案。
使用 Perl,你可以说
(请注意,这会在行尾添加一个空格)
有关该模式的说明,请参阅https://regexr.com/41gi5。
这似乎有效:
利用:
算法是: