これは、次の質問に似ています。
sed を使用してコメント (#) を無視しますが、行はそのままにしておきます
ただし、違いは、1 つの置換ではなく、いくつかの置換を使用してスクリプト ファイルを sed したことです。
スクリプトのすべての行を編集して、次の形式にすることができると思います。
/^#/!s/orig/replace/g
ただし、それは私には少しコピーアンドペーストが多すぎるようです。
もっとエレガントな方法はありますか?
私が使用しているスクリプトは次のとおりです。
これは、次の質問に似ています。
sed を使用してコメント (#) を無視しますが、行はそのままにしておきます
ただし、違いは、1 つの置換ではなく、いくつかの置換を使用してスクリプト ファイルを sed したことです。
スクリプトのすべての行を編集して、次の形式にすることができると思います。
/^#/!s/orig/replace/g
ただし、それは私には少しコピーアンドペーストが多すぎるようです。
もっとエレガントな方法はありますか?
私が使用しているスクリプトは次のとおりです。
ブロックを使用できます:
/^#/!{s/a/b/;s/c/d/}
スクリプトで sed の代わりに awk を使用できますか? 次の sed スクリプト:
s/orig/replace/g
s/\(foo\)bar/\1dog/
次の GNU awk スクリプトに 1 行ずつ変換できます。
{
$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 に、\1sedを awk に変更するだけ\\1です。