2016-08-11 68 views
1

我想刪除ifsetenv sd_ROOT使用sed -i,照常打印其他行。我知道,有AWK在比賽前刪除3行,比賽後刪除1行,不包括sed的匹配行

if {[string match blr* [uname nodename]]} { 
puts stderr "version sd_root_2013_11_04 does not exist" 
} else { 
    setenv sd_ROOT /tools/sd/sd_root_2013_11_04 
} 

預期的輸出方式:

setenv sd_ROOT /tools/sd/sd_root_2013_11_04 
+0

爲什麼不'awk'解決方案工作? – karakfa

+0

我已將這個命令應用於目錄中的所有文件,'awk'不支持就地編輯。我必須打包'awk',這樣做,所以我更喜歡''sed' –

+1

GNU awk 4. *支持就地編輯,就像GNU sed一樣。 'awk -i inplace'腳本文件'。即使沒有,也不要創建不適當的sed腳本,以避免使用'cmd file> tmp && mv tmp file'自己創建tmp文件。 –

回答

0

可與sed來完成,但是是很醜陋:

sed -n '1{N;N;x;n}; /setenv/{N;s/.*//;h;n}; {H;x;s/^\n//;P;s/^[^\n]*\n//;x}; ${x;p}' 
+0

請解釋一下。我用過它,但沒有給出預期的輸出 –