*
テキストファイルでタブとアスタリスク()文字の組み合わせを見つけるにはどうすればよいですか?
たとえば、
入力する:
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
ますbash
。mksh
sh
grep -F $'*\t0\t*\t0\t0'
(または(ASCIIベースのシステムでは)またはで書くことも$'\t'
できます)$'\u0009'
$'\x09'
$'\11'
$'\CI'
grep
ast-openのようないくつかの実装は自分自身をタブ\t
として認識します\x09
。だからあなたはこれを行うことができます:
grep '\*\t0\t\*\t0\t0'
(他の正規表現型と同じです(-E
EREの場合、-P
Perlのような(PCREのような)、-A
ブーストの場合)。
GNU grep
(少なくともGNUシステムでは)は\t
BRE\x09
またはEREを認識しませんが、PCRE(組み込みサポートされている場合)(および\x09
または\11
)は認識します。
grep -P '\*\t0\t\*\t0\t0'
grep
PCREサポートが有効になっている限り、GNUで使用できます(現代のシステムではしばしばそうです)。
別の移植可能なソリューションは、普遍的にサポートされている代替手段を使用することですawk
。\t
awk '/\*\t0\t\*\t0\t0/'
答え2
ilkkachu
コメントによると:
'*\t0\t*0\t0*' に複数のタブがないため、途中にタブが 1 つあります。0、そして最後に0。
注文する:
grep -P '\*\t0\t\*\t0\t0'
この問題を解決します。