2017-03-04 72 views
0

我試圖將文本的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

你不需要替代品上的'g'後綴;線上只會有一個'tstop'字段。 –

回答

0

與GNU的sed:

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

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

如果你想編輯文件 「就地」 用sed的選項-i


參見:The Stack Overflow Regular Expressions FAQ

+0

這正是我想要的。我只有1個問題是什麼意思*/\ 180 /所以我更好地理解sed是如何工作的。 – Spirtoylis

+0

圓括號'()'表示一個捕獲組,'\ 1'表示在這裏使用來自第一捕獲組的值。 – Cyrus

0

n標誌-rne抑制sed命令的正常輸出。只有符合您的模式的行纔會與您的p命令一起輸出。試試這個:

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

使用BRE(基本正Expresssions)更便攜版可能是:

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

注意tstop後的空間也在這裏拍攝,保存的文件格式。另外ig修飾符在你的情況下似乎沒用。

相關問題