0

我试图将tstop文本的参数从120to替换为80. 我得到的是一行文本:tstop 80,丢失了其余的文本。我用了

sed -i -rne 's/(tstop)\s+\w+/\1 80/gip'

我只想更改该行tstop并保持其余文本不变。

部分文字如下:

[Grid]    
X1-grid    1     -6.0  24 u 6.0  
X2-grid    1     -24.   96 u 24.    
X3-grid    1     -18.0  72 u 18.0    
[Chombo Refinement]   
Levels           4     
Ref_ratio        2 2 2 2 2     
Regrid_interval  2 2 2 2     
Refine_thresh    0.3    
Tag_buffer_size  3    
Block_factor     8    
Max_grid_size    64    
Fill_ratio       0.75    
[Time]    
CFL              0.3    
CFL_max_var      1.1    
tstop            120    
first_dt         1.e-5    
[Solver]    
Solver         tvdlf
4

2 回答 2

0

使用 GNU sed:

sed -E 's/^(tstop +)[^ ]*/\180/' file

或者

sed -E '/^tstop/s/[^ ]+$/80/' file

如果您想“就地”编辑文件,请使用 sed 的选项-i


请参阅:堆栈溢出正则表达式常见问题解答

于 2017-03-04T07:50:01.213 回答
0

nin 标志禁止 sed 命令的-rne正常输出。您的命令只会输出与您的模式匹配的行p。试试这个:

sed -i -re 's/(tstop)\s+\w+/\1 80/gi'

使用 BRE(基本正则表达式)的更便携的版本可能是:

sed -i -e 's/\(tstop\)\(  *\)[[:alnum:]]*/\1\280/' file

请注意,tstop此处还会捕获后面的空格,以保留文件格式。在您的情况下ig修饰符似乎也没用。

于 2017-03-04T08:11:06.350 回答