我尝试将文字的tstop
参数从120
替换为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
答案 0 :(得分:0)
使用GNU sed:
sed -E 's/^(tstop +)[^ ]*/\180/' file
或
sed -E '/^tstop/s/[^ ]+$/80/' file
如果您要“就地”修改文件,请使用sed的选项-i
。
答案 1 :(得分:0)
n
中的-rne
标志会抑制sed命令的正常输出。只使用p
命令输出与您的模式匹配的行。试试这个:
sed -i -re 's/(tstop)\s+\w+/\1 80/gi'
使用BRE(Basic Regular Expresssions)的更便携版本可以是:
sed -i -e 's/\(tstop\)\( *\)[[:alnum:]]*/\1\280/' file
请注意,此处还会捕获tstop
之后的空格,以保留文件格式。此外,i
和g
修饰符在您的情况下似乎毫无用处。