grep タブとアスタリスク文字

grep タブとアスタリスク文字

*テキストファイルでタブとアスタリスク()文字の組み合わせを見つけるにはどうすればよいですか?

たとえば、

入力する:

text    *    0    *    0    *    *    some_text
text    *    9    45   9    0    0    some_text
TEXT    *    0    *    0    0    *    some_text

タブ、アスタリスク、ゼロの特定の組み合わせを見つけるにはgrepが必要です。たとえば、次のようになります。

*    0    *    0    0    *

予想出力:

TEXT    *    0    *    0    0    *    some_text

以下を使用して個別に星を見つけることができます。

grep -P '\t' input > output

以下を使用してタブを個別に見つけることができます。

grep '\*' input > output

しかし、この2つをどのように組み合わせることができますか?私は成功しなかったので、次の組み合わせを試しています。

grep -P '\*\t0\t\*0\t0\*' input > output

ベストアンサー1

持ち運べる:

tab=$(printf '\t')
grep -F "*${tab}0${tab}*${tab}0${tab}0"

一部のシェル(ksh93、、、、FreeBSD )では、次のものを使用できzshますbashmkshsh

grep -F $'*\t0\t*\t0\t0'

(または(ASCIIベースのシステムでは)またはで書くことも$'\t'できます)$'\u0009'$'\x09'$'\11'$'\CI'

grepast-openのようないくつかの実装は自分自身をタブ\tとして認識します\x09。だからあなたはこれを行うことができます:

grep '\*\t0\t\*\t0\t0'

(他の正規表現型と同じです(-EEREの場合、-PPerlのような(PCREのような)、-Aブーストの場合)。

GNU grep(少なくともGNUシステムでは)は\tBRE\x09またはEREを認識しませんが、PCRE(組み込みサポートされている場合)(および\x09または\11)は認識します。

grep -P '\*\t0\t\*\t0\t0'

grepPCREサポートが有効になっている限り、GNUで使用できます(現代のシステムではしばしばそうです)。

別の移植可能なソリューションは、普遍的にサポートされている代替手段を使用することですawk\t

awk '/\*\t0\t\*\t0\t0/'

おすすめ記事