在不丢失其他行的情况下编辑文本中的部分行
Edit part of a line in text without losing other lines
我尝试将文本的tstop
参数从120
替换为80
。我得到的是一行文本:tstop 80
,丢失了其余文本。我用了
sed -i -rne 's/(tstop)\s+\w+/ 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
使用 GNU sed:
sed -E 's/^(tstop +)[^ ]*/0/' file
或
sed -E '/^tstop/s/[^ ]+$/80/' file
如果您想编辑文件 "in place" 使用 sed 的选项 -i
。
参见:The Stack Overflow Regular Expressions FAQ
-rne
中的n
标志抑制了sed命令的正常输出。使用 p
命令只会输出与您的模式匹配的行。试试这个:
sed -i -re 's/(tstop)\s+\w+/ 80/gi'
使用 BRE(基本正则表达式)的更便携的版本可能是:
sed -i -e 's/\(tstop\)\( *\)[[:alnum:]]*/0/' file
请注意,tstop
之后的空格也会在此处捕获,以保留文件格式。 i
和 g
修饰符在您的情况下似乎也没有用。
我尝试将文本的tstop
参数从120
替换为80
。我得到的是一行文本:tstop 80
,丢失了其余文本。我用了
sed -i -rne 's/(tstop)\s+\w+/ 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
使用 GNU sed:
sed -E 's/^(tstop +)[^ ]*/0/' file
或
sed -E '/^tstop/s/[^ ]+$/80/' file
如果您想编辑文件 "in place" 使用 sed 的选项 -i
。
参见:The Stack Overflow Regular Expressions FAQ
-rne
中的n
标志抑制了sed命令的正常输出。使用 p
命令只会输出与您的模式匹配的行。试试这个:
sed -i -re 's/(tstop)\s+\w+/ 80/gi'
使用 BRE(基本正则表达式)的更便携的版本可能是:
sed -i -e 's/\(tstop\)\( *\)[[:alnum:]]*/0/' file
请注意,tstop
之后的空格也会在此处捕获,以保留文件格式。 i
和 g
修饰符在您的情况下似乎也没有用。