正则表达式:select 每次出现一个字符直到另一个字符
Regex: select each occurrence of a character up until another character
我在文档中有几行看起来像这样:
foo-bar-foo[Foo - Bar]
我想 select 每 -
个字符,直到每行的第一个 [
括号。因此方括号中的 -
不应 selected.
如何使用 Regex 实现?
我已经有了这个正则表达式 /.+?(?=\[)/g
,它 select 包含第一个 [
之前的每个字符,但我只想要 -
.
编辑:我想用 sed
命令 (GNU) 替换这些 selected 字符。
您可以使用
sed -E ':a; s/^([^[-]+)-//; ta'
看到一个 online demo:
#!/bin/bash
s='foo-bar-foo[Foo - Bar]'
sed -E ':a; s/^([^[-]+)-//; ta' <<< "$s"
# => foobarfoo[Foo - Bar]
详情:
-E
- 启用 POSIX ERE 语法(因此无需转义捕获括号和 +
量词)
:a
- a
标签
s/^([^[-]+)-//
- 从字符串的开头找到除 [
和 -
之外的一个或多个字符,将此子字符串捕获到组 1 (</code>) 中,然后进行匹配一个 <code>-
字符
ta
- 成功替换后跳转到 a
标签
我在文档中有几行看起来像这样:
foo-bar-foo[Foo - Bar]
我想 select 每 -
个字符,直到每行的第一个 [
括号。因此方括号中的 -
不应 selected.
如何使用 Regex 实现?
我已经有了这个正则表达式 /.+?(?=\[)/g
,它 select 包含第一个 [
之前的每个字符,但我只想要 -
.
编辑:我想用 sed
命令 (GNU) 替换这些 selected 字符。
您可以使用
sed -E ':a; s/^([^[-]+)-//; ta'
看到一个 online demo:
#!/bin/bash
s='foo-bar-foo[Foo - Bar]'
sed -E ':a; s/^([^[-]+)-//; ta' <<< "$s"
# => foobarfoo[Foo - Bar]
详情:
-E
- 启用 POSIX ERE 语法(因此无需转义捕获括号和+
量词):a
-a
标签s/^([^[-]+)-//
- 从字符串的开头找到除[
和-
之外的一个或多个字符,将此子字符串捕获到组 1 (</code>) 中,然后进行匹配一个 <code>-
字符ta
- 成功替换后跳转到a
标签