【问题标题】:Match file and line number with sed用 sed 匹配文件和行号
【发布时间】:2016-10-08 17:20:29
【问题描述】:

我有一个如下所示的字符串:

app/views/pages/_my_events_for_ba.html.erb:11:    ba_mbn_programs = Program.ba_and_managed_bar.all(:conditions => "user_programs.user_id = #{current_user.id} and brand_id = #{brand.id}", :order => :name, :joins => [:user_programs], :select => "distinct programs.*")

我正在尝试隔离行号11 和文件名app/views/pages/_my_events_for_ba.html.erb,以便我可以通过vim +11 app/views/pages/_my_events_for_ba.html.erb 使用这些参数打开vim。

但是,我无法让 sed 的匹配项按我想要的方式工作。我的尝试适用于 vim 的正则表达式,但不适用于 sed:

sed 's/\(.*\):\([0-9]\+\).*/\1 \2/p'

【问题讨论】:

  • -E 不是sed 选项
  • 它适用于 OSX,我相信它是 -r 的 bsd 等价物
  • 为我工作。你有sed的奇怪版本吗?
  • 您使用的是基本的正则表达式,而不是扩展的。
  • :set efm=%f:%l:%m | cgetexpr getline('.') | copen

标签: regex vim sed


【解决方案1】:

你可以使用awk:

awk -F: '{print $1, $2}'

正则表达式解决方案可能如下所示:

sed -r 's/([^:]*):([0-9]*):.*/\1 \2/'

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 2017-05-01
    • 1970-01-01
    • 2015-03-24
    • 2012-05-21
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多