您可以用awk,而不是在腳本中的sed?
s/orig/replace/g
s/\(foo\)bar/\1dog/
可轉換一行行的GNU awk腳本:
{
$0=gensub(/orig/,"replace","g")
$0=gensub(/(foo)bar/,"\\1dog","")
}
{ print }
,然後如果你不想處理以#開頭的行這是一個的sed腳本瑣碎的調整到awk腳本來測試該條件進入動作塊之前:
!/^#/ {
$0=gensub(/orig/,"replace","g")
$0=gensub(/(foo)bar/,"\\1dog","")
}
{ print }
下面就來讓你去從你的sed腳本的前幾轉換,如果你想這樣做:
# s=^"=`` =g
$0 = gensub(/^"/,"``","g")
# s=\([ ([{<]\)"=\1 `` =g
$0 = gensub(/([ ([{<])"/"\\1 ``","g")
# s=\.\.\.= ... =g
$0 = gensub(/\.\.\./," ... ","g")
# s=[,;:@#$%&]= & =g
$0 = gensub(/[,;:@#$%&]/," & ","g")
# s=\([^.]\)\([.]\)\([])}>"']*\)[ ]*$=\1 \2\3 =g
$0 = gensub(/([^.])([.])([])}>"']*)[ ]*$/,"\\1 \\2\\3","g")
主要是你只需要改變\(
在在AWK sed將\\1
sed將(
在awk和\1
。
謝謝!我不知道在這一點上可以使用一個塊......我轉換了scipt,但是現在得到'/ bin/sed:file bin/tokenize2.sed第2行:命令後面的額外字符我將轉換現在逐行掃描... – benroth 2013-02-18 10:47:15
@benroth:在一些非GNU seds中,您可能必須使用換行符而不是';'來分隔命令。 – choroba 2013-02-18 10:49:34
現在非常棒!乾淨又幹淨! – benroth 2013-02-18 10:58:47