2014-10-20 60 views
0

我有一個看起來像下面使用正則表達式的sed

/abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_1_2168.sorted.bam 

我想提取其中包含.sorted.bam最後一部分線。這是

C03YABXX_1_2168.sorted.bam 

我在做什麼,而不是工作是

sed 's/.*sorted.bam//' 

回答

2

你可以試試下面的sed命令,

sed 's/.*\///' file 

例子:

$ echo '/abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_1_2168.sorted.bam' | sed 's/.*\///' 
C03YABXX_1_2168.sorted.bam 

.*會匹配任何字符零次或更多次貪婪(最長匹配)。因此.*\/將匹配最後的/符號。用空字符串替換匹配的子字符串會給你所需的輸出。

通過AWK,

awk -F/ '{print $NF}' file 

-F/意味着我們告訴awk的考慮/爲字段分隔符。 $NF變量包含最後一個字段的值。所以打印$NF會給你想要的輸出。

+0

謝謝回答,並解釋它。 – Angelo 2014-10-20 07:52:31

+0

或者只是'awk -F /'$ 0 = $ NF'' – Jotne 2014-10-20 08:49:26

+0

'sed's:。*/::'YourFile' :-) – NeronLeVelu 2014-10-20 12:48:01

1

我只是想,爲什麼我們不能在這裏使用「basename」命令?

[email protected]:~/AMD$ basename 'echo /abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_2_2168.sorted.bam' 
C03YABXX_2_2168.sorted.bam 

處理文件內容,例如

考慮文件ff.txt以下內容,假設你需要處理2號線。

cat ff.txt 
/abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_1_2168.sorted.bam 
/abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_2_2168.sorted.bam 
/abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_3_2168.sorted.bam 
/abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_4_2168.sorted.bam 

輸出

[email protected]:~/AMD$ basename `grep "2_2168" < ff.txt` 
C03YABXX_2_2168.sorted.bam