在尝试并尝试了有关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')
请告诉我我该如何实现。 感谢您的帮助。
答案 0 :(得分:1)
这将起作用:
sed -ir "/^gem 'music'.*/s/mae-45124/mae-44444/" Gemfile
您无需逃避'
,因为您在他们周围使用了"
。
在某些情况下,您可能需要转义 -
。
您自己的解决方案没有最后一个'/',这是为了完成s
命令。