在sed替换中用RegEx替换模式

时间:2014-08-27 09:00:27

标签: regex unix sed pattern-matching

我是UNIX新手,我使用sed命令替换文件中的模式。

文件内容为:

xyx.filename are in Filename

filename are in Filename and app.filename is in Filename

我想忽略字符串" .filename " (即字符串文件名以"。"开头)和替换 文件名字符串的其余部分(即文件名,文件名..等)到的 NEWNAME

sed命令中将使用什么正则表达式?

1 个答案:

答案 0 :(得分:2)

您可以使用:

$ sed -r 's/(^|[^.])filename/\1newname/gi' file
xyx.filename are in newname
newname are in newname and app.filename is in newname

解释

  • -r用于仅使用( ... )而不是\( ... \)来抓取群组。
  • (^|[^.])filename会匹配文件开头的filenamefilename之类的内容,而前面的任何字符都不是点.
  • \1newname它将newname替换为catched值(filename前面的值)。
  • gi执行替换g,并i进行案例处理。