2017-12-07 10 views
0

あまりにも単純な質問のために事前に謝罪しています。Awk:コメントがPHPでどのように取り除かれるかを理解する

「自己へのメモ」の大きな山の中で、の作品を完全にphpファイルから削除しています。しかし、私はそれをよりよく理解したいと思います:

awk '/^\/\*/{c++} c!=1; /^ \*\//{c++}'

私は、残念ながら、より良い、それがどのように機能するかを理解するために、オリジナルのポストを見つけることができません。

グーグルでは、元のポストではなく、C++で大量のものが出てきます。 Explain ShellでもSymbol Houndも役に立ちませんでした。

私は特に{c++} c!=1;ビットで困惑しません。どんな助けでも大歓迎です。

+1

数値コンテキストの変数の初期値は '0'なので、' C++ 'が最初に実行されると値は' 1'、次に '2'など...' c!= 1' 'c 'が' 1'でなければ、条件は真となり、入力レコードが出力されます(デフォルトアクション)。http:// backreferenceを参照してください。 org/2010/02/10/idiomatic-awk /そのようなイディオムをもっと – Sundeep

+0

あなたの迅速な答えをありがとう!実際にはC++を使用していますが、Awkアノテーションではありませんか?ブックマークしておいたサイトがありますが、C++が表示されませんでした。したがって、失われています。 – Farhang

+1

コメントマーカー( '/ *'と '* /')の始めと終わりにvar 'c'(' C++ ')の値を増やし、' c'と1を比較して出力するので、最初のコメント。 –

答えて

1

awkスクリプトをテストしましたが、正常に動作しません。 あなたは削除するには、次のいずれかを使用する必要があります

gawk '/^\/\*/{c++} c!=1; /^.*\*\//{c=0}' php_file 

のみ/* comments *//* comments */マルチラインのコメントや、単一の行を削除するには!上でテスト

一言で言えば

enter image description here

  • awkはラインで入力ファイルの行を読み取り、そのデフォルトのアクションを行います:
  • を印刷条件/^\/\*/が満たされたとき(ブロック番号が実行されます!awk変数はデフォルトで0に設定されているため、ブロックc=1c!=1の後にはfalseとなり、何も印刷されません。
  • コメント欄にある限り、c!=1falseになりますので、何も印刷されません。
  • 最後のコメント行に到達し、cは0に設定されます。したがって、次の行からすべてが再度印刷されます。

備考:コマンドで

  • ラインがあるとして、/* */はまだ同じライン上のいくつかのスーパーの重要なコマンドがある場合
  • //コメントは
  • を削除されません印刷され、その後直接コメントブロックに続いて彼らは失われる !!!

    /* comment starts 
    /* still some comments 
    end of comments */some super important commands; 
    

改善:

/* comment starts 
/* still some comments 
end of comments */ 
c!=1でスクリプトをする場合には正常に機能しなくなります、スクリプトの安定性を向上させるためにc<1によって

  • 変更c=!1

+1

ありがとうございます。実際のawkを助けただけでなく、あなたがそれを非常にはっきりと説明したことに感謝しています。とても有難い。 – Farhang

+0

あなたはようこそ! :-) 'awk'と' sed'は、ファイル(特にコード/設定ファイル)を操作するのに役立つ非常に強力なツールです。あなたがそれらのツールについての知識を深めることを推奨します。 !! – Allan

関連する問題