这类似于以下问题:
但是,不同之处在于,我没有进行一次替换,而是使用 sed 脚本文件进行了几次替换。
我想我可以将脚本的每一行都编辑为以下形式:
/^#/!s/orig/replace/g
但是,对我来说,这似乎有点过多的复制和粘贴。
有没有更优雅的方式?
我正在使用的脚本是:
这类似于以下问题:
但是,不同之处在于,我没有进行一次替换,而是使用 sed 脚本文件进行了几次替换。
我想我可以将脚本的每一行都编辑为以下形式:
/^#/!s/orig/replace/g
但是,对我来说,这似乎有点过多的复制和粘贴。
有没有更优雅的方式?
我正在使用的脚本是:
您可以使用块:
/^#/!{s/a/b/;s/c/d/}
您可以在脚本中使用 awk 而不是 sed 吗?一个 sed 脚本:
s/orig/replace/g
s/\(foo\)bar/\1dog/
可以逐行转换为 GNU awk 脚本:
{
$0=gensub(/orig/,"replace","g")
$0=gensub(/(foo)bar/,"\\1dog","")
}
{ print }
然后,如果您不想处理以 # 开头的行,那么在进入操作块之前对 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")
主要是您只需将\(
sed更改为(
awk,并将\1
sed 更改\\1
为 awk。