從這篇文章中,我能夠object.*通過使用或正則運算式字串識別模式m/(?<=object\.)\w*。但是,由于我不熟悉 Linux,我無法使用命令sed或perl正確提取所需的令牌。因此,我需要你的幫助。我最好的猜測是grep -E -n object file.txt | perl -nle 'm/(?<=object\.)\w*/; print $1'。
uj5u.com熱心網友回復:
您可以使用grep或sed:
grep -oP '(?<=object\.)\w ' file
sed -nE 's/.*object\.([[:alnum:]_] ).*/\1/p' file
請參閱在線演示。
grep -oP允許您使用 PCRE 正則運算式(帶選項-P)并提取所有匹配的文本(帶-o選項)。
該sed命令更復雜,它允許每行提取一次匹配項(即一行的最后一個):首先,它抑制默認行輸出-n并將正則運算式風格設定為 POSIX ERE(帶-E),然后匹配帶有object. 的行一個或多個字母數字或下劃線字符被捕獲\1并用 Group 1 值替換整行,并且僅回傳該結果。
uj5u.com熱心網友回復:
$1包含第一個捕獲 ( (...)) 捕獲的內容。但是你沒有任何捕獲。
相反,您需要$&,其中包含與模式匹配的文本。
grep -E -n object file.txt | perl -nle'm/(?<=object\.)\w*/; print $&'
而不是無條件列印,您可以僅在找到匹配項時列印,無需grep.
perl -nle'print $? if /(?<=object\.)\w /' file.txt
最后,我們不需要相對緩慢的環視。
perl -nle'print $1 if /object\.(\w )/' file.txt
在某些系統上,grep也可以使用-oand來完成這項作業-P。
grep -oP '(?<=object\.)\w ' file.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/521127.html
標籤:perlUnix
下一篇:替換部分fasta標頭
