我是bash脚本的新手。我想分割以下字符串,

chr14:81370042-81371098(+)

进入
chr14 81370042 81371098 +

要么
chr14:81370042-81371098(-)

进入
chr14 81370042 81371098 -

请告诉我如何使用一种适用于两种情况的命令来执行此操作。

我尝试了cat a.tsv | tr -s ':' '\t' | sed "s/\t[0-9]+.*[0-9]+/[0-9]+\t[0-9]/g",它不起作用。

谢谢。

最佳答案

sed可能有效:

sed -E 's/[^-+_[:alnum:]]+/ /g; s/ +$//; s/-(.)/ \1/g' <<< 'chr14:81370042-81371098(+)'
chr14 81370042 81371098 +

要不然:
sed -E 's/[^-+_[:alnum:]]+/ /g; s/ +$//; s/-(.)/ \1/g' <<< 'chr14:81370042-81371098(-)'
chr14 81370042 81371098 -
[^-+_[:alnum:]]+匹配任何不是-+_和字母数字的字符中的1个或多个。

09-13 11:20