Sed:如何replace特定模式位于文件中后发现的string

如果我在文件中有以下列表:

integer, parameter :: ni = 1024 integer, parameter :: nj = 256 integer, parameter :: nk = 16 

并希望基于string'ni ='进行search,然后用例如'512'这样的新stringreplace后面的string(本例中为'1024')(我想保留空格)。 我该如何使用sed? 请注意,我想只是擦除等号后的任何内容,这是因为有时string不会是一个简单的整数,它可能是“1.D0”。 在某些情况下,可能会有评论。 所以我只是想把等号前面的东西抹掉,换成新的值。

结果将是:

 integer, parameter :: ni = 512 integer, parameter :: nj = 256 integer, parameter :: nk = 16 

Solutions Collecting From Web of "Sed:如何replace特定模式位于文件中后发现的string"

GNU sed支持扩展正则表达式,如果你给它的-r标志。

 sed -re 's/(:: ni =)[^=]*$/\1 512/' file 

更好的是,匹配多个空格。

 sed -re 's/(::\s+ni\s+=)[^=]*$/\1 512/' file 

\1是对括号( )匹配项的引用,所以我们用\1替换一个新值。

如果我正确地理解你,这样的事情应该这样做:

sed 's/\(ni = \).*/\1REPLACEMENT/'

 sed -e 's/:: ni = [0-9][0-9]*$/:: ni = 512/' 

这样可以在指定的匹配周围寻找合理的上下文,以最大限度地减少在另一个字符串中找到某个地方的机会。