仅在括号之间替换空格

joe*_*hau 6 regex bash awk sed

在字符串中,我试图用下划线替换括号之间的所有空格.例如,鉴于this ( is my ) simple example我想得到this (_is_my_) simple example.

我正在研究bash,并考虑为sed创建一个替换表达式,但是我无法想出一个简单的单行解决方案.

期待您的帮助

per*_*eal 6

使用sed:

sed ':l s/\(([^ )]*\)[ ]/\1_/;tl' input
Run Code Online (Sandbox Code Playgroud)

如果你有不平衡的括号:

sed ':l s/\(([^ )]*\)[ ]\([^)]*)\)/\1_\2/;tl' input
Run Code Online (Sandbox Code Playgroud)

  • 这个答案已经很老了。但是,我花了一些时间才完全理解这个正则表达式。因此,我简要说明一下:`:l` 和 `;tl` 中的 `l`(小写 L)是一个任意标签。它也可以是`a`。对?真正好的想法是我们迭代该行,如果我们成功使用 `s/.../.../`,我们会通过 `:[LABEL] [REGEX];t[LABEL] 跳回到开头`. 因此,只要我们有成功的点击,我们就迭代一行?那是对的吗? (2认同)