我有一個sed文件,用其他字符串替換文件中所有字符串。 我想這樣做在線,但沒有使用-i從終端 什麼變化的.sed文件sed命令文件中的標誌
#!/bin/sed
s/include/\#include/
我有一個sed文件,用其他字符串替換文件中所有字符串。 我想這樣做在線,但沒有使用-i從終端 什麼變化的.sed文件sed命令文件中的標誌
#!/bin/sed
s/include/\#include/
只需使用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 }
在這種特殊情況下,只是將#
預先設置爲一個字符串。
我不認爲它會工作,因爲-i
和-f
選項通常都可以有參數,但你可能是幸運的。
shebang行可以包含一個選項組(又名集羣)。你會需要它包含-f
(這是從你的榜樣缺失),因此集羣可能看起來像
#!/bin/sed -if
前提是你的話並不需要的參數來-i
選項,並在允許集羣這樣的第一名(-if
專業-i -f
)。
明顯的解決方法是將腳本更改爲shell腳本; -f
選項不再需要,因爲該腳本不在文件中。
#!/bin/sh
exec sed -i 's/include/\#include/' "[email protected]"
我不認爲你可以做到這一點。 'sed'命令文件只能包含命令,而不能包含選項。 – Barmar 2014-09-01 09:31:33
嘗試(我猜)'#i'在腳本/動作列表的第一行。它適用於'-n',所以可能也適用於其他選項 – NeronLeVelu 2014-09-01 10:50:08
不可以,它不起作用@NeronLeVelu – saisandeep 2014-09-01 10:54:17