我正在使用perl -pe和grep來做多行grep。這樣做的目的是,當""被用作行的延續字母時,我需要連接該行。
所以我的檔案是
record -field X
-欄位Y
我正在做
perl -pe 's/
/ /' a/b/c/*/records/*.rec | grep "-field.*X.*-field.*Y"
這樣做的問題是,它只給我grep的結果,而不告訴我哪個檔案有問題。有什么辦法可以解決這個問題。我需要知道哪些檔案也有這個問題。
我可以做一個foreach shell腳本,但我想知道是否有一個同樣的單行版本可以做
uj5u.com熱心網友回復:
一旦你在一個Perl程式中,為什么要去使用系統的grep? Perl的工具比shell的工具要豐富得多、圓潤得多、實用得多。 一種方法是
perl -0777 -nE'say "$ARGV: $_" for
grep { /-field.*X.*-field.*Y/ } split /
/, s{
}{ }gr' file-list
(為了便于閱讀,分成幾行)
我們將整個檔案讀入$_("slurp "它),所以能夠合并那些特定的行,使用-0777開關。然后,該n被替換為一個空格,并回傳所得的字串(憑借/r修飾符),并通過split
來重新生成行。
然后,該行串列被送入grep,并帶有你想要的模式,符合該模式的行被通過。然后它們被列印出來,前面加上當前處理的檔案的名稱,可在$ARGV變數中找到。
uj5u.com熱心網友回復:
答案是使用ARGV[0]
。perl -pe 'print "$ARGV[0]: ";s/
/ /' a/b/c/*/records/*.rec | grep "-field.*X.*-field.*Y"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311377.html
標籤:
