2017-08-09 9 views
1

Ich versuche Perl zu verwenden, um eine Datei zu bearbeiten, im Wesentlichen zum Ausschneiden und Einfügen von Inhalt in der Datei. Es scheint jedoch, dass ich die Regex falsch konstruiert habe. Ich würde mich freuen, wenn ich es aussortieren könnte. Die Substitution Befehl sollte Schnitt den Inhalt nach export PATH=$PATH bis zu aber nicht einschließlich # THIS IS LAST geschnitten, und fügen Sie diese Inhalte vor export PATH=$PATHPerl Regex: Ausschneiden und Einfügen

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

Aktuelle bashrc:

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

# THIS IS LAST! 

Gewünschte bashrc:

+0

Re "_cut den Inhalt nach' export PATH = $ PATH'_ "... bedeutet das wirklich" nach ** der Zeile ** 'export ..'"? (Was meine Antwort tut - es tauscht die ganze Zeile mit dem, was darauf folgt) – zdim

+0

@zdim: Ich meine, beginnend mit der folgenden Zeile, dh 'Export BREW_HOME ...' Im Wesentlichen möchte ich alles ** zwischen ** den Zeilen schneiden 'export PATH = $ PATH' und' # DIESE LINIE IST LETZT! 'und füge diesen Inhalt ** vor **' export PATH = $ PATH' ein. Hilft das bei der Klärung der Absicht? – Ari

+0

Ja, so habe ich es genommen. Korrigiert meine Antwort, um diese knifflige leere Zeile zu berücksichtigen, die sich nicht bewegen sollte :) – zdim

Antwort

3

Um Sie über mehrere Zeilen entsprechen die gesamte Datei in einem skalaren

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

wo -0777 ermöglicht „schlürfen“ -Modus haben müssen, und (?=...) ist ein positive lookahead.

Der \n? ist im Lookahead, um die optionale leere Zeile einzuschließen, die nicht verbraucht werden sollte, da diese Zeile nicht verschoben werden sollte. Dann muss das vorherige Muster auch nicht gierig sein. Dies schützt eine einzelne vorangehende leere Zeile, alle anderen werden abgeglichen und ausgetauscht.

+0

@Miller Danke für Kommentare – zdim

Verwandte Themen