我發現了一些帶perl的命令行,這些命令行將頭文件插入到我的文件中,而不需要經過一個接一個地插入它們的繁瑣過程。有人能通過這個命令行的perl方面來引導我嗎?我是新手,似乎無法爲我寫的內容找到正確的解釋。謝謝!用perl插入頭文件到多個文件中
cat header.txt | perl -0 -i -pe'BEGIN {$ h =};打印$ h'1 *
我發現了一些帶perl的命令行,這些命令行將頭文件插入到我的文件中,而不需要經過一個接一個地插入它們的繁瑣過程。有人能通過這個命令行的perl方面來引導我嗎?我是新手,似乎無法爲我寫的內容找到正確的解釋。謝謝!用perl插入頭文件到多個文件中
cat header.txt | perl -0 -i -pe'BEGIN {$ h =};打印$ h'1 *
歡迎來到stackoverflow!
-e 而不是在xxxx.pl文件提供一個腳本,它提供了命令行
-p 使得它遍歷文件名參數有點像sed上也打印的$內容_在腳本的結尾。
上述兩個組合在-pe
-i 指明要編輯的地方文件,並寫入輸出到同一個文件。在實踐中,Perl重命名輸入文件並從這個重命名版本讀取,同時寫入原始名稱的新文件
-0 重新定義記錄字符的結尾(默認爲\ n),以便您可以讀取整個輸入文件作爲一個單行
1 * 是您的腳本的命令行參數,所以我想你正在修改任何文件的名稱以1開頭(你可以使用* .c,或取決於您正嘗試修改的文件類型)
print $ h 打印變量$ h,它是腳本的「主」。如果它是用頭文件的內容初始化的(這是一行的意圖),那麼它將打印頭文件
BEGIN {some code here} 這是在腳本啓動之前執行的東西。這是我難倒的地方。這似乎並不喜歡有效的Perl代碼
所以基本上: - 這將據稱在BEGIN塊啜整個頭文件(因爲-0),並將其存儲在變量$ H - 遍歷所有的由命令行末尾的通配符指定的文件 - 對於每個文件:打印標題(打印$ h)然後打印hte文件本身(因爲-pe)
因此它等同於拼出腳本:
$h = gets content of the entire header file
while (<>){ #loop implied by -pe, iterates over all the 1* files
# the main contents of the "-e" script are inserted below as part of executing -pe
print h$; #print the header we saved
print $_; # implied by -pe, and since we are using -0, this prints the entire content in one shot
# end of the "-e" script. again it was a single print $h statement, the second print is implied by -pe
}
這有點難以解釋,看看每有關詳細信息,請參閱文檔。
這不是100%完整的解釋,因爲我不認爲BEGIN塊是正確的。我試過它在我的ubuntu機器上,它也抱怨它的語法太
非常感謝你花時間向我解釋這一切!這太棒了! :O) – Rebecca
'perldoc perlrun' – toolic
它實際上工作嗎? BEGIN塊內的語法看起來不正確 –
是的,它跑了,做了我想做的事! – Rebecca