2016-03-22 8 views
0

Ich versuche Newline in einer Datei tmp mit Perl zu ersetzen, aber unerwartete Verhalten wie unten angezeigt.Pro ersetzen Newlines funktioniert nicht wie erwartet

user$ cat tmp 
aa 
bb 
cc 


user$ perl -p -e 's/\n/==/g' tmp 
aa==bb==cc== 

user$ perl -p -e 's/\nbb/==/g' tmp 
aa 
bb 
cc 

Warum ist der Ausgang nicht

aa== 
cc 

statt?

+0

try 'perl -pe -0777' –

+0

@AvinashRaj' perl -p -e -0777 's/\ nbb/==/g' tmp ' Kann s/\ nbb/==/g nicht öffnen: Keine solche Datei oder Verzeichnis. – user13107

+1

'perl -0777 -p -e ...' – ysth

Antwort

6

Das Problem ist hier, dass -p Flag wie Code-Loops:

LINE: 
    while (<>) { 
    ...  # your program goes here 
    } continue { 
    print or die "-p destination: $!\n"; 
    } 

So Ihre regexp Läufe für jede Zeile. Verwenden Sie einfach -0777 Option, um die gesamte Datei als eine Zeile zu lesen:

perl -p -0777 -e 's/\nbb/==/g' tmp 
Verwandte Themen