3

変数を探して多くの古い PowerBASIC ソース ファイルを grep しようとしてgrepいますが、行末コメント内の変数への参照が一致しないようにするのに苦労しています。

例えば:

ANGLE = 40    ' THIS IS A COMMENT ABOUT ANGLE'S VALUE
FOO = 3/ANGLE ' ANGLE CAN APPEAR ON RIGHT SIDE AS WELL
DELTA = 35    ' ANGLE AND DELTA AREN'T FRIENDS

最初に私は使用していました:

# grep "\bANGLE\b.*'" SRC_FILE.BAS

ただし、コメントのない行を無視するだけでなく、まったく使用ANGLEしないコード行 (行などDELTA) も出力します。これは、これらの行のコメント (つまり ) にアポストロフィ ( ) が1 つ含まれているためです。'AREN'T

出力をパイプして、不要な行を削除することを考えました:

# grep "\bANGLE\b" SRC_FILE.BAS | grep -v "'.*\bANGLE\b"

ANGLEしかし残念ながら、コメントにたまたま「」が含まれている、私が望むコード行も削除されます。

grep を取得して、関連する実際のコードの行と一致させ、コメントに一致する行のみANGLEを無視するにはどうすればよいですか?

4

2 に答える 2

2

最初にコメントを取り出すことができます:

sed "s/'.*$//" SRC_FILE.BAS | grep '\bANGLE\b'

文字列に ANGLE という単語または単一引用符が含まれている場合、これはまだ失敗する場合があります。この問題を正確に解決するには、正規表現を使用する代わりにパーサーを作成する必要があります。

于 2013-05-23T16:25:46.040 に答える
2
grep "^[^']*\bANGLE\b" SRC_FILE.BAS

ANGLEこれは、 の左側のすべてにが含まれていない行にのみ一致します'。文字列にアポストロフィがある場合、jnylen のソリューションと同様の問題が発生します。

于 2013-05-23T16:27:08.757 に答える