2015-09-13 94 views
0

我已經Sample.txt文件。我使用changes.plcmd命令應用查找並替換Sample.txt。我正在尋找刪除行1行2。我試過使用每個perl行 in changes.pl但我得到Result.txt所有。如何通過perl匹配通過正常代碼不匹配的換行符?

Sample.txt的

line 1 
line 2 
line 3 
line 4 
line 5 
line 6 

changes.pl

BEGIN { 
    @ARGV = map glob("\"$_\""), @ARGV; 
} 

s/a/b/g; 

cmd命令

perl -i.bak -p changes.pl My/Files/Directory/Sample.txt 

條perl的線

s/line 1\nline 2//g; #perl line 1 
s/line 1\n\rline 2//g; #perl line 2 
s/line 1\r?\n?\r?line 2//g; #perl line 3 
s/line 1\s*line 2//g; #perl line 4 
s/line 1.*line 2//su; #perl line 5 
s/line 1[\s\S]line 2//g; #perl line 6 

的Result.txt

line 1 
line 2 
line 3 
line 4 
line 5 
line 6 

注意

    我使用Perl在Windows
  • 當我打開Sample.txt的記事本,我發現換行符沒有顯示(screenshot),而當我打開的Result.txt我發現他們顯示(screenshot)。當我打開UltraEdit中的任何一個時,我發現換行顯示爲(screenshot)。所以,我認爲這個問題涉及到如何對文本進行編碼。此外,建議下載Sample.txtResult.txt找出問題所在。
+0

'sample.txt'具有用於換行的'LF'(或'\ n')字符。由於記事本僅將'CRLF'(或'\ r \ n')視爲新行標記,因此不會顯示它們。至於替換模式,使用'ignorecase'修飾符。 – hjpotter92

+0

MS DOS/Windows文本文件通常有\ r \ n(回車+換行)作爲行終止,記事本僅支持以CRLF作爲行終止的文本文件。 UNIX文本文件只有\ n作爲行終止。 \ n \ r對大多數操作系統無效。 UltraEdit檢測線路終端類型並將其顯示在主窗口底部的狀態欄中以顯示活動文件。有關更多詳細信息,請參閱關於[newline]的維基百科文章(https://en.wikipedia.org/wiki/Newline)。 – Mofi

回答

2

您正在逐行讀取文件,但您希望執行跨越行的匹配。一次添加-0777以處理整個文件。

+0

如何添加'0777'並添加到什麼? – Omar

+0

'perl'命令行選項'-0777',作爲'perl'的可選參數。 – ikegami