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标志启用。