我使用sed替換14個不同的縮寫,如CA_23456,CB_scaffold34532,...以及文件中的「正確」名稱,它將所有縮寫放在一行中。多條線路上的sed命令不起作用
acc=$1
sed -e 's/CA_[A-Z]*[a-z]*[0-9]*/Hesperocyparis_arizonica/;s/CB_[A-Z]*[a-z]*[0-9]*/Hesperocyparis_bakeri/;s/CM_[A-Z]*[a-z]*[0-9]*/Hesperocyparis_macrocarpa/;s/CS_[A-Z]*[a-z]*[0-9]*/Cupressus_sempervirens/;s/CT_[A-Z]*[a-z]*[0-9]*/Cupressus_torulosa/;s/JD_[A-Z]*[a-z]*[0-9]*/Juniperus_drupacea/;s/JF_[A-Z]*[a-z]*[0-9]*/Juniperus_flaccida/;s/JI_[A-Z]*[a-z]*[0-9]*/Juniperus_indica/;s/JP_[A-Z]*[a-z]*[0-9]*/Juniperus_phoenicea/;s/JX_[A-Z]*[a-z]*[0-9]*/Juniperus_procera/;s/JS_[A-Z]*[a-z]*[0-9]*/Juniperus_scopulorum/;s/MD_[A-Z]*[a-z]*[0-9]*/Microbiota_decussata/;s/XN_[A-Z]*[a-z]*[0-9]*/Xanthocyparis_nootkatensis/;s/XV_[A-Z]*[a-z]*[0-9]*/Xanthocyparis_vietnamensis/' ${acc}.nex > ${acc}_replaced.nex
爲了使其更具可讀性,我想有超過使用多行命令分裂「\」(不是所有的替代品都顯示爲簡潔起見)
acc=$1
sed -e 's/CA_[A-Z]*[a-z]*[0-9]*/Hesperocyparis_arizonica/;\
s/CB_[A-Z]*[a-z]*[0-9]*/Hesperocyparis_bakeri/;\
s/CM_[A-Z]*[a-z]*[0-9]*/Hesperocyparis_macrocarpa/'\
${acc}.nex > ${acc}_replaced.nex
不過,我得到一個錯誤消息:sed:-e表達式#1,字符168:未終止的地址正則表達式。我已經查看了各種webforums上的類似問題的答案,並嘗試了各種各樣的東西(在每一行使用'/.../.../',離開';'出來......),但是我不能讓它工作。我究竟做錯了什麼?
我刪除了反斜槓,但現在終端凍結 – Markus
猜測:只有那些經過單引號的字符串應該被刪除。另外,你必須在字符串和文件名'$ {acc} .nex'之間加一個空格(順便說一句,你可能需要用雙引號括起來),否則文件名將被認爲是sed代碼。我以應該工作的命令的形式編輯。 – Wintermute
優秀,解決了問題!非常感謝您的幫助。 – Markus