perl -pe one liner : Replace all matched characters with same number of a different character. 非全局

标签 perl regex sed

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

示例输入:

Title 1
-------
Title two
---------
   +--------+
   |asciibox|
   +--------+

输出应该是:

Title 1
^^^^^^^
Title two
^^^^^^^^^
   +--------+
   |asciibox|
   +--------+

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

s!(-+)!"^" x length($1)!e;

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

最佳答案

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

perl -pe 's/\G-/^/g'

另一种可以与 Perl 或 sed 一起使用的方法:测试和翻译

perl -pe 'y/-/^/ if /^-+$/'

sed '/^--*$/y/-/^/'

关于perl -pe one liner : Replace all matched characters with same number of a different character. 非全局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36100678/

相关文章:

mysql - 如何使用 UNIX 命令行将 XML 转换为 MYSQL 插入?

perl - 使用 Marpa::R2 实现的解析器中的异常处理

使用正则表达式按规则进行 C# 字符串操作

java - Jakarta Regexp 和 Java 6 java.util.regex 之间的差异

正则表达式匹配两组重复数字,其中不允许是相同的数字

linux - 如何搜索用户所属的特定组

linux - 在 sed 中编程 rev

regex - 如何使用linux命令搜索和替换文件中的多行字符串

perl - 在 perl 中关闭多个输出管道而不阻塞每个管道

perl - 如果定义了调用函数的简短语法