2014-09-01 50 views
0

我有一個sed文件,用其他字符串替換文件中所有字符串。 我想這樣做在線,但沒有使用-i從終端 什麼變化的.sed文件sed命令文件中的標誌

#!/bin/sed 
s/include/\#include/ 
+3

我不認爲你可以做到這一點。 'sed'命令文件只能包含命令,而不能包含選項。 – Barmar 2014-09-01 09:31:33

+0

嘗試(我猜)'#i'在腳本/動作列表的第一行。它適用於'-n',所以可能也適用於其他選項 – NeronLeVelu 2014-09-01 10:50:08

+0

不可以,它不起作用@NeronLeVelu – saisandeep 2014-09-01 10:54:17

回答

0

只需使用awk來進行:

{ sub(/include/,"#include"); rec = rec $0 RS } 
END{ printf "%s", rec > FILENAME } 

,或者如果你想操作嚴格上字符串:

BEGIN{ old="include"; new="#include" } 
s = index($0,old) {$0 = substr($0,1,s-1) new substr($0,s+length(old)) 
{ rec = rec $0 RS } 
END{ printf "%s", rec > FILENAME } 

這可以簡化爲:

s = index($0,"include") {$0 = substr($0,1,s-1) "#" substr($0,s) 
{ rec = rec $0 RS } 
END{ printf "%s", rec > FILENAME } 

在這種特殊情況下,只是將#預先設置爲一個字符串。

0

我不認爲它會工作,因爲-i-f選項通常都可以有參數,但你可能是幸運的。

shebang行可以包含一個選項組(又名集羣)。你會需要它包含-f(這是從你的榜樣缺失),因此集羣可能看起來像

#!/bin/sed -if 

前提是你的話並不需要的參數來-i選項,並在允許集羣這樣的第一名(-if專業-i -f)。

明顯的解決方法是將腳本更改爲shell腳本; -f選項不再需要,因爲該腳本不在文件中。

#!/bin/sh 
exec sed -i 's/include/\#include/' "[email protected]"