我尝试使用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!
答案 0 :(得分:3)
要匹配多行,您需要将整个文件放在标量
中perl -0777 -pe's/(export PATH.*?\n)(.*?)(?=\n?# THIS IS LAST)/$2$1/s' input.txt
其中-0777启用“slurp”模式,(?=...)
为positive lookahead。
前瞻\n?
包含不应使用的可选空行,因为不应移动该行。那么之前的模式也需要非贪婪。这可以保护前一个空行,任何其他空行都可以匹配和交换。