Linux
需要在 sed 命令中指定數字
我有一個fasta文件,如下所示,
>accessory/4745/24/lake_sample_pv_strain_LH201_chromosome_Gene2509 ATGCTAG >accessory/95/89.78/lake_sample_pv_strain_LH201_Gene125 TAGTCT
我需要
accessory/numericals/numericals/
從 fasta 標頭中刪除字元,所以我使用了以下命令,但它未能達到我的目的。sed 's/accessory[/][0-9][/][0-9]//g' accessory.fasta
預期的輸出是
>lake_sample_pv_strain_LH201_chromosome_Gene2509 ATGCTAG >lake_sample_pv_strain_LH201_Gene125 TAGTCT
請幫我解決這個問題。提前致謝。
您的正則表達式正在查找“
accessory/
,然後是一個數字([0-9]
),然後是一個/
”,這不會出現在您的文件中。您想搜尋一個或多個數字,並且您還想允許.
哪個不是數字。因此,使用與原始邏輯相同的邏輯,您會想要這樣的東西:$ sed -E 's/accessory[/][0-9.]+[/][0-9.]+[/]//' accessory.fasta >lake_sample_pv_strain_LH201_chromosome_Gene2509 ATGCTAG >lake_sample_pv_strain_LH201_Gene125 TAGTCT
請注意我沒有使用
g
修飾符,因為這在這裡沒有用,因為每行只有一個匹配項。然而,這是不必要的限制。如果文件如您所見,您只想刪除所有內容,直到最後
/
一行:$ sed -E 's|>.*/|>|' accessory.fasta >lake_sample_pv_strain_LH201_chromosome_Gene2509 ATGCTAG >lake_sample_pv_strain_LH201_Gene125 TAGTCT
運算符可以將
s///
任何字元作為分隔符。因此,既然我知道我需要匹配/
,我過去常常s|||
避免需要逃避/
.如果您真的需要像原來的那樣限制,您可以簡化為:
$ sed -E 's|accessory/[0-9.]+/[0-9.]+/||' accessory.fasta >lake_sample_pv_strain_LH201_chromosome_Gene2509 ATGCTAG >lake_sample_pv_strain_LH201_Gene125 TAGTCT