首页 > 解决方案 > 使用 sed 根据在文件中该行的前两个单词上找到该行来替换该行的单词

问题描述

在网上浏览并尝试了许多关于 unix sed cmd 和正则表达式的文章后,我仍然无法实现我想要的。请帮助我实现这一目标。我有一个文件 Gemfile,在此我想根据前两个单词找到一行并替换该行上的另一个单词。如何在 ubuntu 中使用 sed cmd 实现这一点。我的 Gemfile 是这样的:-

gem 'retryable'
gem 'roo'
gem 'autoprefixer-rails', '8.6.5'
gem 'music', branch:'mae-45124', git: vhl_repo('mymusic')
gem 'aws-sdk', '~> 3.0'

在这个文件中,我想首先使用前两个单词搜索一行,即 gem 'retryable' gem 'roo' gem 'autoprefixer-rails', '8.6.5' gem 'music', branch:'mae-45124', git: vhl_repo('music') gem 'aws-sdk', '~> 3.0' 然后替换给定分支的值,例如在这种情况下为'mae-45124' 我试过使用这个 cmd bu 这给出了这个错误 - >

sed -i -e "/^gem \'music\'.*/s/mae-45124/mae-44444" Gemfile

错误来了: -

sed: -e expression #1, char 34: unterminated `s' command

我想将这一行从:-
gem 'music', branch:'mae-45124', git: vhl_repo('music')
更改为
gem 'music', branch:'mae-44444', git: vhl_repo('music ')

请告诉我如何实现这一目标。任何帮助将不胜感激。在此先感谢。

标签: regexsed

解决方案


这将起作用:

 sed -ir "/^gem 'music'.*/s/mae-45124/mae-44444/" Gemfile

你不需要逃跑',因为你"在他们周围使用。
在某些情况下,您可能需要逃跑-

而你自己的解决方案没有最后一个'/',就是完成s命令。


推荐阅读