デフォルトの10ファイルの2進数(0,1)数にのみGrapを使用する

デフォルトの10ファイルの2進数(0,1)数にのみGrapを使用する

2進数(0,1)と他の10進数(0-9)を含むファイルがあるとします。

010... 10567
011... 23678
...

など。

上記の例は実際にこれを正確に表現したものではありませんが、それは要点ではありません。 (単にこの特定の事例を説明するためのものです。)

ファイル/出力で「数字」を見つける方法はすでにわかっています。

grep '[0-9]*'

これを使用してください:

grep '[0-1]*'

10進数の一部である1と0が強調表示/選択されます。

それで、同じことをどうするべきかわかりません。ただ二進数(0,1)。したがって、出力例にはバイナリのみが表示されます(バイナリは常に同じ列にあります)。

これを行う方法はありますか?

答え1

次に、列のデータを調べて、col列のデータに1と0のみが含まれるたびに印刷します。

col番号はコマンドラインに表示されます(1ここではその値を使用します)。

awk -v col=1 '$col ~ /^[01]+$/ { print $col }' file

バイナリが常にゼロで始まることがわかっている場合は、式をから^[01]+$^0[01]*$0の後に任意の数の1および/または0がオーム)に変更できます。もしあなたならまた2進数は常に3桁の数字であることを知っている場合、または^0[01][01]$を使用してください^0[01]{2}$

テスト:

$ cat file
010 10567
011 23678
030 10567
012 23678
$ awk -v col=1 '$col ~ /^[01]+$/ { print $col }' file
010
011

答え2

より簡単な解決策は次のとおりです。

grep -E "\<[01]+\>" filename

\<\>は単語の境界であり、正規表現は1回以上一致します01

awk を使用して指定された列のみを照合することもできます。 awkを使用すると、バイナリ文字列が列1にある場合は、次のことができます。

awk 'match($1,/\<[01]+\>/) {print $1}'

答え3

より良い解決策が見つかった場合(コメントセクションの@Inianのクレジット)前の投稿解決策として)

grep -E '\b[01]+\b'

これは実際のバイナリ入力でのみ動作するようです。また、10進数/その他の数字の一部である2進数と誤って一致しません。

だから:

echo "10198865" |  grep -E '\b[01]+\b'

何も出力されませんが、次のようになります。

echo "101010" |  grep -E '\b[01]+\b'

する。

答え4

0連続的で1他の数字が前後に出ない数字を検索する必要があるようです。したがって、次のよう0に少なくとも3回連続して1(テストされていません):

[^2-9][01]{3,}[^2-9]

編集:コメントで述べたように、これは「210001」とも一致します。

関連情報