2016-06-25 9 views
-1

指定されたパターンを検索し、数字で始まる、私が書かれているgrepが、私は、シンボル(非英数字)を含むファイル内のすべてのテキストをgrep検索したい

grep -i "^[0-9]\|[^a-zA-Z0-9]\| " 

それらの間のスペースを持っていたします次のgrepコマンドは完全に動作しますが、特定の制限に満たないテキストも含めたいと考えています。たとえば、3未満で15以上のテキストはgrepする必要があります。 1つのコマンド

私は使ってみました

{3,15} 

とすべてが、所望の出力表現以下

sample input 
aa 
9dsa 
abcd 
abc#$ 
ab d 

Sample output 
aa    //because length less than 3 
ab d    //because has space in between 
9dsa    // because starts with a number 
abc#$   //because has special symbols in it 
+0

サンプル入力とそのサンプル入力の希望出力を質問に追加してください。 – Cyrus

+0

「シンボルを含む」とはどういう意味ですか?非英数字の場合と同じですか? – Vikhram

+0

@Cyrus done!私は 'を追加しました – slash

答えて

2

についての説明です非自明な条件を検索するためのgrep:

$ awk 'length()<3 || length()>15 || /[^[:alnum:]]/ || /[[:space:]]/ || /^[0-9]/' file 
aa 
9dsa 
abc#$ 
ab d 

私は真剣に意味、単純に/より明確に得ることができませんでしたし、それが任意のPOSIXのawkでは動作してます要件が変更された場合、変更するのは簡単です。

1

はあなたが必要な行を見つける必要があります得ることができませんでした。私はあなたがそう交代は以下

^[[:digit:]]|[@#$%^&*()]|^.{0,3}$|^.{15,}$ 

正常に動作しますgrep -Eを使用すると仮定していますと、ちょうど代わりにawkを使う正規表現などを分かりやすく、simplicty、堅牢性、移植性については、

^[[:digit:]] - Match a line that starts with a number 
[@#$%^&*()]  - Match a line containing the specified symbols. 
        Alternatively you can use [^[:alnum:]], if you want 
        the symbol to match any non alpha numeric character. 
        Beware that a space, underscore, tab, quote, etc are all 
        examples of non alpha numeric characters 
^.{0,3}$  - Match a line containing less than 3 characters 
^.{15,}$  - Match a line containing more than 15 characters 
+0

'\ d'にはGNU awkが必要です。英数字以外の文字を列挙しようとしないでください(たくさんありません!)、POSIX文字クラス '[:alnum:]'を否定します。 –

+0

@エドモートンあなたはそうです。答えを修正しました – Vikhram

関連する問題