regex - 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 结构中,我对正则表达式有一段复杂的时间。任何帮助都会非常有用。
谢谢
解决方案
$ sed -r 's/.*:c(\S*)\s+(\S*)\s.*/>\2:\1/' <<<">lcl|1:c127-20 Ricardo3 phone"
>Ricardo3:127-20
上面的行适用于给定的输入。(gnu sed)
推荐阅读
- image - 图像 tintColor React-Native 中的线性渐变
- django - 主管启动 celery worker,生成它并以状态码退出(退出状态 1;不是预期的)
- laravel - 布局问题请看附件
- c++ - 如何在 gcc 窗口中使用 SFML
- c++ - 如果 x,递归不起作用,我的函数只能删除第一个元素
- html - 无法覆盖用户代理样式表
- java - 结合从 JSON 加载的两个地图块
- xamarin - System.Serialization Exception ===> Vimeo 视频无法在 Xamarin.forms App 上的 IOS/Android 上播放
- c# - 为什么“dotnet msbuild”在第一次运行时会失败并出现警告,然后第二次运行成功?
- javascript - 如何输出附近的搜索?