首页 > 解决方案 > sed 和 order 模式

问题描述

我有一个包含我的目标行的文件(以'>'开头)...

>lcl|1:c127-20 Ricardo3 phone

我想得到:

>Ricardo3:127-20

我的步骤:(1)用''更改':',(2)删除字符串'c'和(3)获取第一个和第二个匹配项并以不同的顺序打印它们,由':'分隔为'\ 2 [:] \1'。

这是我的代码:

sed -e '/^>/s/:/ /' -e '/^>/s/c//' -e '/^>/s/.*\s\([A-Z_0-9a-z]*\)\s.*\[A-Z_0-9a-z].*/\2[:]\1/' file

但我仍然只得到:

>ll|1 127-20 Ricardo3 phone

在最后一个 sed 结构中,我对正则表达式有一段复杂的时间。任何帮助都会非常有用。

谢谢

标签: regexunixsed

解决方案


$ sed -r 's/.*:c(\S*)\s+(\S*)\s.*/>\2:\1/' <<<">lcl|1:c127-20 Ricardo3 phone"
>Ricardo3:127-20 

上面的行适用于给定的输入。(gnu sed)


推荐阅读