我有這個查找腳本
Find $DATA/ -mindepth 1 -maxdepth 1 |\
perl -ane ' s:.*/((. )\-[0-9]{8,10}[a-z]*([_\-].*)?):$2: && print; ' | \
sort -u > $loctmp/speakers_all.txt
任何shell腳本上帝可以為我解碼嗎?perl -ane 命令在做什么?
uj5u.com熱心網友回復:
perl -n 說“遍歷輸入行,但不要列印它們。”
perl -a 意味著像 awk 中那樣拆分輸入行,但在這里看起來沒有必要。
perl -e 說“這個引數是要運行的程式”。
運行perldoc perlrun以閱讀有關 Perl 命令列用法的更多資訊。
uj5u.com熱心網友回復:
perl -ane ' s:.*/((. )\-[0-9]{8,10}[a-z]*([_\-].*)?):$2: && print; '
用于 Perl 的命令切換,如下所示perl -h:
-a autosplit mode with -n or -p (splits $_ into @F)
-n assume "while (<>) { ... }" loop around program
不使用自動拆分,可以安全洗掉。
-e只是表示要運行的代碼在哪里。也可以替換為包含代碼的檔案。例如perl foo.pl。
代碼本身只是一個正則運算式替換。如果展開,代碼如下所示:
while (<>) {
s:.*/((. )\-[0-9]{8,10}[a-z]*([_\-].*)?):$2: && print;
}
while (<>)回圈輸入,將每一行放入$_默認變數。s:...是替換運算子,但默認分隔符/已替換為冒號:。通常這樣做是為了避免在正則運算式中轉義分隔符。- 正則運算式本身匹配任何字符
.0 次或多次*,后跟一個斜杠/(可能是更改分隔符的原因)。然后由任意字符 1 次或多次組成的字串.被捕獲()。然后是一個破折號\-,后跟 8 到 10 個數字 0-9,然后是字符 az 0 次或更多次。然后它捕獲一個由_or組成的字串-,后跟任何字符.0 次或更多次。此捕獲也是可選的?,這意味著它可以匹配 0 次或 1 次。如果有匹配,它將被$2. 捕獲$2是第一部分,在斜線之前(. ),據我所知。 &&表示僅在 LHS 為真時才執行 RHS。即僅在正則運算式匹配時列印。print是一樣的print $_。
簡而言之,代碼將提取最后一個斜杠和 8 到 10 位數字之間的部分,并丟棄字串中的所有其他內容。除了可選匹配之外,這意味著可以保留 8-10 位數字之后的字串,如果它的開頭有下劃線或破折號。然后列印。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/418210.html
標籤:
