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为新值.