Perl Regex:剪切和粘贴

时间:2017-08-09 17:36:38

标签: regex perl

我尝试使用perl编辑文件,主要是剪切和粘贴文件中的内容。但是,似乎我错误地构造了正则表达式。我非常感谢帮助整理它。替换命令应该切割export PATH=$PATH之后的内容但包括# THIS IS LAST,并将该内容粘贴到export PATH=$PATH之前< / p>

Perl命令: perl -i -pe 's;(export PATH.*\n)(.*)(\# THIS IS LAST!\n);$2$1$3;' bashrc

当前的bashrc:

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

# THIS IS LAST! 

所需的bashrc:

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

# THIS IS LAST!

1 个答案:

答案 0 :(得分:3)

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

perl -0777 -pe's/(export PATH.*?\n)(.*?)(?=\n?# THIS IS LAST)/$2$1/s' input.txt

其中-0777启用“slurp”模式,(?=...)positive lookahead

前瞻\n?包含不应使用的可选空行,因为不应移动该行。那么之前的模式也需要非贪婪。这可以保护前一个空行,任何其他空行都可以匹配和交换。