您可以用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