Regex Perl正则表达式:剪切和粘贴

Regex Perl正则表达式:剪切和粘贴,regex,perl,Regex,Perl,我试图使用perl来编辑文件,本质上是剪切和粘贴文件中的内容。然而,我似乎没有正确地构造正则表达式。如果能帮我整理一下,我将不胜感激。替换命令应剪切export PATH=$PATH之后的内容,直到但不包括。#这是最后一个,并将该内容粘贴到export PATH=$PATH Perl命令: perl-i-pe;(导出路径。*\n)(.*)(\\这是最后一个!\n)$2$1$3;' bashrc 当前版本: export TERM=xterm export PATH=$PATH export BR

我试图使用perl来编辑文件,本质上是剪切和粘贴文件中的内容。然而,我似乎没有正确地构造正则表达式。如果能帮我整理一下,我将不胜感激。替换命令应剪切
export PATH=$PATH
之后的内容,直到但不包括
。#这是最后一个
,并将该内容粘贴到
export PATH=$PATH

Perl命令:
perl-i-pe;(导出路径。*\n)(.*)(\\这是最后一个!\n)$2$1$3;' bashrc

当前版本:

export TERM=xterm
export PATH=$PATH
export BREW_HOME=/home/dev/.linuxbrew 
export ANACONDA_HOME=/home/dev/.anaconda3

# THIS IS LAST! 
所需资源:

export TERM=xterm 
export BREW_HOME=/home/dev/.linuxbrew 
export ANACONDA_HOME=/home/dev/.anaconda3
export PATH=$PATH

# THIS IS LAST!

要跨多行匹配,需要将整个文件放在一个标量中

perl -0777 -pe's/(export PATH.*?\n)(.*?)(?=\n?# THIS IS LAST)/$2$1/s' input.txt
其中启用“slurp”模式,并且
(?=…)
是一个


\n?
处于前瞻状态,包括不应使用的可选空行,因为该行不应移动。那么前面的模式也需要是非贪婪的。这将保护前面的一个空行,任何其他空行都将被匹配和交换。

要跨多行匹配,您需要将整个文件放在一个标量中

perl -0777 -pe's/(export PATH.*?\n)(.*?)(?=\n?# THIS IS LAST)/$2$1/s' input.txt
其中启用“slurp”模式,并且
(?=…)
是一个


\n?
处于前瞻状态,包括不应使用的可选空行,因为该行不应移动。那么前面的模式也需要是非贪婪的。这将保护前面的一个空行,任何其他空行都将被匹配和交换。

重新“在导出路径=$PATH之后剪切内容”。。。这是否真的意味着“在第
行之后导出..
”?(我的答案是——它将整行内容替换为它后面的内容)@zdim:我的意思是从后面的行开始,即
导出BREW\u HOME…
本质上,我想在这两行之间剪切所有内容
导出路径=$PATH
。#这一行是最后一行
并将该内容粘贴到导出路径=$PATH之前。这有助于澄清意图吗?是的,我就是这么认为的。修正了我的答案,解释了那条不应该移动的棘手的空行:)重新“在导出路径=$PATH之后剪切内容”。。。这是否真的意味着“在第
行之后导出..
”?(我的答案是——它将整行内容替换为它后面的内容)@zdim:我的意思是从后面的行开始,即
导出BREW\u HOME…
本质上,我想在这两行之间剪切所有内容
导出路径=$PATH
。#这一行是最后一行
并将该内容粘贴到导出路径=$PATH之前。这有助于澄清意图吗?是的,我就是这么认为的。修正了我的答案,解释了那条不应该移动的狡猾的空行:)@Miller谢谢你comments@Miller谢谢你的评论