1

これは、次の質問に似ています。

sed を使用してコメント (#) を無視しますが、行はそのままにしておきます

ただし、違いは、1 つの置換ではなく、いくつかの置換を使用してスクリプト ファイルを sed したことです。

スクリプトのすべての行を編集して、次の形式にすることができると思います。

/^#/!s/orig/replace/g

ただし、それは私には少しコピーアンドペーストが多すぎるようです。

もっとエレガントな方法はありますか?

私が使用しているスクリプトは次のとおりです。

http://www.cis.upenn.edu/~treebank/tokenizer.sed

4

2 に答える 2

4

ブロックを使用できます:

/^#/!{s/a/b/;s/c/d/}
于 2013-02-18T10:07:08.233 に答える
1

スクリプトで 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です。

于 2013-02-18T10:16:23.277 に答える