2016-09-24 16 views
1

sedを使ってregexを提案してください。一致する文字列だけの行を探してください。 sedコマンド一致するパターンだけの行を見つける

/* a comment line in a C program */ 
#include <stdio.h> /* including the libraries */ 
int main() 
{ 
int n, i, flag = 0; /* assigning the values */ 

printf("Enter a positive integer: "); 
scanf("%d",&n); 

for(i=2; i<=n/2; ++i) 
{ 
    /* condition for nonprime number */ 
    if(n%i==0) 
    { 
     flag=1; 
     break; 
    } 
} 

if (flag==0) 
    printf("%d is a prime number.",n); 
else 
    printf("%d is not a prime number.",n); 

return 0; /* returns 0 */ 
} 

は、上記のテキストでは、私はすべての先導を持つか、私は前または実行可能文の後ではありませんコメントを削除したいテキストを末尾(OR)されていないだけで、コメント行を削除したいです。

私はsed 's_\(/*\)\(.*\)\(*/\)_''_g' inputを使用しているが、それはすべてのコメント

を削除し、適切なコマンドを提案してください

+0

_ "コメント行に先頭または末尾のテキストがない" _それが意味するものを明確にすることはできますか? – John1024

答えて

1

はこれを試してみてください:

sed '/^[ \t]*\/\*.*\*\/[ \t]*$/d' file 

は、すべてのコメント行が唯一の潜在的なリーディングを持つか、末尾のスペースを削除します。

説明:

  • ^[ \t]*:ゼロ以上のスペースまたはタブ
  • \/\*.*\*\/始まるコメント続い

    は線d(削除)コマンドを適用します。 /**/がここ

  • [ \t]*$エスケープされます:ゼロ個以上のスペースまたはタブで終わる

編集:

は、第二の文字範囲内の余分な^を削除しました。

+0

感謝の男!それは期待どおりに働いていました。 – Srinivas21

+0

正しい解決策が読みにくくなります。 'comment =" \/\ *。* \ * \/";で簡単に理解できるようにすることができます。 sed "/^[\ t] * $ {コメント} [^ \ t] * $/d"です。 –

+0

私はそれを読むことができます、あなたは2番目の '^'を削除する必要があります。コメントのあとにスペースがない行も削除されます: '/ * Test this// i = 4;' –

関連する問題