Regex 一行中有多个匹配项的文本行操作

Regex 一行中有多个匹配项的文本行操作,regex,bash,Regex,Bash,我想在bash脚本中的一行上执行以下操作: 案例1 "text1=text2 some text /orig/path/s/abc.la more text" "text1=text2 some text /orig/path/s1/abc.la more /orig/path/s1/xzy.la text" 所需结果: "text1=text2 some text /replacement/path/t/abc.la more text" "text1=text2 some text /

我想在bash脚本中的一行上执行以下操作:

案例1

"text1=text2 some text /orig/path/s/abc.la more text"
"text1=text2 some text /orig/path/s1/abc.la more /orig/path/s1/xzy.la text"
所需结果:

"text1=text2 some text /replacement/path/t/abc.la more text"
"text1=text2 some text /replacement/path/abc.la more /replacement/path/xzy.la text"
案例2

"text1=text2 some text /orig/path/s/abc.la more text"
"text1=text2 some text /orig/path/s1/abc.la more /orig/path/s1/xzy.la text"
所需结果:

"text1=text2 some text /replacement/path/t/abc.la more text"
"text1=text2 some text /replacement/path/abc.la more /replacement/path/xzy.la text"
因此,当文件名与给定扩展名(在本例中为“*.la”)匹配时,我希望替换一行中文件名的所有实例的路径


提前谢谢

目标始终是最简单的模式,因为您所需的替换似乎只需要“记住”文件名本身,而不需要对原始路径做任何操作,您可以使用非贪婪量化的通配符
*?
吃掉第一个和最后一个
/
之间的所有内容,并使模式非常简单:

模式:
/.*?/(\w+).la

替换:
/mypath/here/$1.la


我们的目标是添加一些自己的代码,至少显示您自己为解决此问题所做的研究工作。我对正则表达式完全不熟悉,在交叉编译包时,我对libtool有问题,不幸的是,在*.la文件中插入了错误的路径,从而阻止了其他包的生成。下面是一个确切的例子:orig行:dependency_libs='-L/opt/mingw32/i686/lib-lws2_32-lole32-lwinmm-lshlwapi/lib/libintl.la lib/libiconv.la'替换行:dependency_libs='-L/opt/mingw32/i686/lib-lws2-lole32-lwinmm-lshlwapi/opt/ming32/i686/libiconv',非常感谢你!此外,regex链接还帮助我解决了不同情况下的问题。最后一个解决方案是在这里,只是我在匹配模式中添加了一个空格,并在替换模式中添加了一个空格。SED不接受“lazy”量词(“?”),因此这个regexp将无法正常工作。相反,使用perl wich还支持就地编辑,最终的解决方案是:perl-pi-e“s:\/.*?\/(\w+.la):\/newpatath\/\1:g”inputfile