如果我在文件中有以下列表:
integer, parameter :: ni = 1024
integer, parameter :: nj = 256
integer, parameter :: nk = 16
并且想要根据字符串'ni ='进行搜索,然后用一个像'512'这样的新字符串替换后面的字符串(在这种情况下为'1024')(我想保留空格) 。我怎么能用sed呢?请注意,我想基本上擦除等号后面的任何内容,这是因为有时字符串不是一个简单的整数,它可能类似于'1.D0'。在某些情况下,可能会有评论。所以我只想消除等号前面的任何内容并用新值替换。
结果将是:
integer, parameter :: ni = 512
integer, parameter :: nj = 256
integer, parameter :: nk = 16
答案 0 :(得分:10)
如果你给它-r
标志,GNU sed支持扩展的正则表达式。
sed -re 's/(:: ni =)[^=]*$/\1 512/' file
更好的是,匹配多个空格。
sed -re 's/(::\s+ni\s+=)[^=]*$/\1 512/' file
\1
是对括号( )
中匹配内容的引用,因此我们将\1
替换为新值。
答案 1 :(得分:4)
如果我理解正确的话,这样的事情应该这样做:
sed 's/\(ni = \).*/\1REPLACEMENT/'
答案 2 :(得分:1)
sed -e 's/:: ni = [0-9][0-9]*$/:: ni = 512/'
这会查找指定匹配项周围的合理上下文,以最大限度地减少在另一个字符串中找到ni
的可能性。