Sed:如何替换特定模式位于文件中后找到的字符串

Iso*_*ion 5 regex unix linux bash sed

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

integer, parameter :: ni = 1024
integer, parameter :: nj = 256
integer, parameter :: nk = 16
Run Code Online (Sandbox Code Playgroud)

并且想要基于字符串'ni ='进行搜索,然后用例如'512'的新字符串替换后面的字符串(在这种情况下为'1024')(我想保留空格).我怎么能用sed呢?请注意,我想基本上擦除等号后面的任何内容,这是因为有时字符串不是一个简单的整数,它可能类似于'1.D0'.在某些情况下,可能会有评论.所以我只想消除等号前面的任何内容并用新值替换.

结果将是:

integer, parameter :: ni = 512
integer, parameter :: nj = 256
integer, parameter :: nk = 16
Run Code Online (Sandbox Code Playgroud)

hwn*_*wnd 10

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

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

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

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

这\1是对括号中匹配内容的引用( ),因此我们将替换\1为新值.


use*_*058 5

如果我理解正确的话,应该这样做:

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