Regex 使用sed替换一行中的一个字,其基础是在文件中该行的前两个字上找到该行

Regex 使用sed替换一行中的一个字,其基础是在文件中该行的前两个字上找到该行,regex,sed,Regex,Sed,在网上阅读并尝试了大量关于unix sed cmd和正则表达式的文章之后,我仍然无法实现我想要的。请帮助我实现这一目标。 我有一个文件Gemfile,在这篇文章中,我想在前两个单词的基础上找到一行,并替换这行中的另一个单词。我如何在ubuntu中用sed cmd实现这一点。 我的文件如下所示:- gem 'retryable' gem 'roo' gem 'autoprefixer-rails', '8.6.5' gem 'music', branch:'mae-45124', git: vhl

在网上阅读并尝试了大量关于unix sed cmd和正则表达式的文章之后,我仍然无法实现我想要的。请帮助我实现这一目标。 我有一个文件Gemfile,在这篇文章中,我想在前两个单词的基础上找到一行,并替换这行中的另一个单词。我如何在ubuntu中用sed cmd实现这一点。 我的文件如下所示:-

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“音乐”,分支机构:“mae-45124”,git:vhl_repo(“音乐”) gem'aws sdk','~>3.0',然后替换给定分支的值,即在本例中的eg'mae-45124' 我已尝试使用此命令,但出现此错误->

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

sed: -e expression #1, char 34: unterminated `s' command
我想将此行从:-
gem“音乐”分支机构:mae-45124,git:vhl_repo(“音乐”)

gem“music”,分支:mae-44444,git:vhl_repo(“music”)

请告诉我如何才能做到这一点。 任何帮助都将不胜感激。请提前感谢。

这将有效:

 sed -ir "/^gem 'music'.*/s/mae-45124/mae-44444/" Gemfile
您不需要转义
,因为您在它们周围使用

在某些情况下,您可能需要退出
-


您自己的解决方案没有最后一个“/”,即完成
s
命令。

您应该在44444之后再加一个“/”,这就是错误所在。它也可以在不转义的情况下工作,比如:-sed-i”/^gem'music'/s/mae-44554/mae-4353554554/" Gemfile@POW在括号表达式之外,
-
不是一个特殊的regex元字符,它是一个简单的
-
字符。