我有一個文件名爲文件三行:爲什麼我的-p單行打印我想跳過的行?
行一個
線兩條
線三條
當我這樣做:
的perl -ne「打印if/one /'檔案
我得到這樣的輸出:
行一個
當我試試這個:
的perl -pe '未來除非/一個/' 文件
輸出是:
行一個
線兩條
線樹
我希望既一行代碼相同的輸出。我的期望錯了還是錯了別的?
我有一個文件名爲文件三行:爲什麼我的-p單行打印我想跳過的行?
行一個
線兩條
線三條
當我這樣做:
的perl -ne「打印if/one /'檔案
我得到這樣的輸出:
行一個
當我試試這個:
的perl -pe '未來除非/一個/' 文件
輸出是:
行一個
線兩條
線樹
我希望既一行代碼相同的輸出。我的期望錯了還是錯了別的?
你的期望是錯的。該-p
開關把下面的循環在你的代碼:
LINE:
while (<>) {
... # your program goes here
} continue {
print or die "-p destination: $!\n";
}
如果你讀the documentation for next
,它說:
需要注意的是,如果有以上一
continue
塊,它將獲得 執行即使在丟棄的線上。
next
居然跳到continue block(如果有的話),它可以追溯到循環的條件之前。
你可以做類似
perl -pe '$_ = "" unless /one/' file
$ perl -ne 'next unless /one/ && print' file
line one
首先關於在程序中使用的選項:
-n assume "while (<>) { ... }" loop around program
-p assume loop like -n but print line also, like sed
。
perl -ne 'print if /one/' file
僅打印第一行作爲其中包含字符串「one」的唯一行。
perl -ne 'next unless /one/' file
不會打印任何東西,因爲它沒有調用打印並沒有-p
選項。
perl -pe 'next unless /one/' file
如上幾乎相同,沒有從程序本身輸出但由於-p
選項的,被印刷在文件的每一行。