如何重复Perl正则表达式,直到没有更改为止?

gna*_*arf 5 regex bash perl command-line

我正在尝试编写一个简单的命令行脚本来修复一些空格,并且需要使用制表符替换两个空格的出现,但前提是它出现在行的开头(仅由其他制表符作为前缀).

s/^(\t*)  /\1\t/g;如果我经历了多次传递,我提出了完美的工作原理,但我不知道perl知道如何循环直到字符串没有改变,或者是否有正则表达式来处理它.

我唯一的想法是使用lookbehind但它不能是可变长度.如果它足够短以适应快速命令行脚本,我将对非正则表达式解决方案持开放态度.

作为参考,当前的perl脚本正在执行,如下所示:

perl -pe 's/^(\t*)  /$1\t/g'
Run Code Online (Sandbox Code Playgroud)

use*_*419 6

检查一个非常相似的问题.

您可以使用1 while s/^(\t*) /$1\t/g;重复模式,直到没有任何更改为止.

  • 嗨,sysfault.你能进一步解释一下吗?`1 while`对我来说似乎很奇怪?为什么要做这个工作? (2认同)