perl -pe one liner:用相同数量的不同字符替换所有匹配的字符.不全球化

Mik*_*ike 2 regex perl sed

我想知道是否有一个Perl(或其他)单行代码将替换-具有相同数量的抑扬符的所有连字符^,前提是连字符从行的开头开始.

输入示例:

Title 1
-------
Title two
---------
   +--------+
   |asciibox|
   +--------+
Run Code Online (Sandbox Code Playgroud)

输出应该是:

Title 1
^^^^^^^
Title two
^^^^^^^^^
   +--------+
   |asciibox|
   +--------+
Run Code Online (Sandbox Code Playgroud)

在Perl本身我可以运行这样的东西:

s!(-+)!"^" x length($1)!e;
Run Code Online (Sandbox Code Playgroud)

但有没有办法从命令行执行此操作?

Cas*_*yte 6

是的,使用\G匹配字符串开头的锚点或上一个匹配后的位置:

perl -pe 's/\G-/^/g'
Run Code Online (Sandbox Code Playgroud)

您可以使用Perl或sed的另一种方式:测试和翻译

perl -pe 'y/-/^/ if /^-+$/'
Run Code Online (Sandbox Code Playgroud)

要么

sed '/^--*$/y/-/^/'
Run Code Online (Sandbox Code Playgroud)