0

内容のあるファイルがあります

abc dbw ;\
xxx{ sample test } 
bewolf \
bewolf 
test

確認する必要があります

 xxx{ sample test }
 bewolf

これらの行を次のようにコメントアウトします

/*xxx{ sample test }
bewolf*/

試しましgrepたがgrep、文字列を検索します。Dashスクリプトには配列がないため、さらに困難な作業になります。

headとを使用してそのセクションを切り取ることができるように、開始インデックスと終了インデックスを取得しようとしていましたtail

sedを使用するような他のアイデアawkは歓迎されます。

より一般的には、Bashスクリプトを使用してCファイル内の1つのマクロにコメントを付ける必要があります。

4

5 に答える 5

0

あなたが持っている行にコメントしたいと仮定します:

xxx{サンプルテスト}
bewolf

awk '{if($0~/bewolf/ || $0~/xxx{ sample test }/)print "//"$0;else print}'

テスト:

    > awk '{if($0~/bewolf/ || $0~/xxx{ sample test }/)print "//"$0;else print}' temp
    abc dbw ;\
//    xxx{ sample test } 
//    bewolf \
//    bewolf 
    test
于 2012-06-01T10:47:52.750 に答える
0

複数の終了コメントが気にならない場合は、次のsedような単純なものを使用できます。

sed -e "s%^xxx{ sample test }$%\/\*&\*\/%" -e "s%^bewolf$%\/\*&\*\/%" file.txt

入力:

abc dbw ;\
xxx{ sample test }
bewolf \
bewolf
test

出力:

abc dbw ;\
/*xxx{ sample test }*/
bewolf \
/*bewolf*/
test

直接-i上書きする場合は、フラグを追加してください。file.txt

于 2012-06-01T11:04:44.427 に答える
0

これはあなたのために働くかもしれません:

 sed '/^xxx{ sample test }/!b;:a;$b;N;/.*\nbewolf *$/!ba;s//\/* & *\//' file

説明:

  • で始まる行に焦点を当てxxx{ sample test }ます。/^xxx{ sample test }/!b
  • ループラベルを作成する:a
  • ファイルの終わりの場合はベイルアウトします。$b
  • 次の行を取得します。N
  • で終わる行を確認しbewolf、そうでない場合は次の行を取得します。つまり、にループしaます。/.*\nbewolf *$/!ba
  • パターンスペースをコメントで囲み、印刷します。s//\/* & *\//
于 2012-06-01T13:58:13.340 に答える
0

さらに短い:

awk '/sample test/,/bewolf/' infile >outfile
于 2012-06-01T11:19:51.297 に答える
0

以下は、行の一致で始まり、行の一致で終わるセクションを変更して、最初に単一の「/ *」を追加し、最後に単一の「*/」を追加します。

awk -vstart=xxx -vend=bewolf '$0~start {$0="/*" $0;inmacro=1} inmacro==1 && $0~end {$0=$0 "*/";inmacro=0} {print}' infile > outfile

これはあなたが探しているものに近いかもしれません。もちろん、変数を定義せず、代わりに命令でそれらをハードコードする場合は、短くすることができます。

于 2012-06-01T12:13:55.813 に答える