在文件中该行的前两个单词上找到该行的基础上,使用sed替换该行的单词

时间:2018-12-22 14:06:00

标签: regex sed

在尝试并尝试了有关unix sed cmd和正则表达式的大量文章之后,我仍然无法实现我想要的。请帮助我实现这一目标。 我有一个文件Gemfile,在此我想根据前两个单词找到一行,并替换该行上的另一个单词。我如何使用sed cmd在ubuntu中实现这一点。 我的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' 宝石“ roo” gem'autoprefixer-rails','8.6.5' gem'music',分支:'mae-45124',git:vhl_repo('music') gem'aws-sdk','〜> 3.0',然后替换给定的branch值,例如在这种情况下为'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',分支:'mae-45124',git:vhl_repo('music')

gem'music',branch:'mae-44444',git:vhl_repo('music')

请告诉我我该如何实现。 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这将起作用:

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

您无需逃避',因为您在他们周围使用了"
在某些情况下,您可能需要转义-

您自己的解决方案没有最后一个'/',这是为了完成s命令。