我有一個看起來像下面使用正則表達式的sed
/abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_1_2168.sorted.bam
我想提取其中包含.sorted.bam最後一部分線。這是
C03YABXX_1_2168.sorted.bam
我在做什麼,而不是工作是
sed 's/.*sorted.bam//'
我有一個看起來像下面使用正則表達式的sed
/abh/HS200/110616_SN220_0066_AC03YABXX/Archived/C03YABXX_1_2168.sorted.bam
我想提取其中包含.sorted.bam最後一部分線。這是
C03YABXX_1_2168.sorted.bam
我在做什麼,而不是工作是
sed 's/.*sorted.bam//'
你可以試試下面的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
會給你想要的輸出。
我只是想,爲什麼我們不能在這裏使用「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
謝謝回答,並解釋它。 – Angelo 2014-10-20 07:52:31
或者只是'awk -F /'$ 0 = $ NF'' – Jotne 2014-10-20 08:49:26
'sed's:。*/::'YourFile' :-) – NeronLeVelu 2014-10-20 12:48:01