RegEx,替换可变数量的替换

希望我错过了一些明显的东西。

我有一个包含以下几行的文件:

| A | B | C |
|-----------|
Ignore this line
| And | Ignore | This |
| D | E | F | G |
|---------------|

我想找到这些|----|行,删除那些……并用前一行中的|a替换所有字符^。例如

^ A ^ B ^ C ^
Ignore this line
| And | Ignore | This |
^ D ^ E ^ F ^ G ^

到目前为止,我有:

perl -0pe 's/^(|.*|)n|-+|/$1/mg'

这需要来自 stdin 的输入(一些其他修改已经发生sed)...并且它正在使用-0/m支持多行替换。

匹配似乎是正确的,它删除了|----|行,但我看不出如何使用(或)反向引用|进行^替换。$11

我不记得我以前在哪里做过,但另一种语言允许我用${1/A/B}A 替换 B,但这让 perl 感到不安。

我一直想知道这是否可以使用/e/ee可以使用,但我对 perl 不太熟悉如何做到这一点。

回答

您可以使用

perl -0pe 's{^(.*)R|-+|$R?}{$1 =~ s,|,^,gr}gme' t

细节:

  • ^(.*)R|-+|$R?- 匹配所有出现(见最后的g标志)
    • ^- 行首(注意匹配行首和行尾的m标志)^$
    • (.*) - 第 1 组:整条线
    • R - 换行序列
    • |-|字符
    • -+- 一个或多个-字符
    • |- 一个|字符
    • $ - 行结束
    • R? - 一个可选的换行序列。

找到匹配项后,所有内容|都将替换为^using $1 =~ s,|,^,gr,即在 Group 1 值内替换。此语法通过e标志启用。


以上是RegEx,替换可变数量的替换的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>