列に文字列を含む列番号

列に文字列を含む列番号

この質問に関して、 文字列に一致する列の列番号

特定の文字列を含む列番号を取得したいです。

彼らはその下で働かなかった。

string=Bo*
echo 'Hi Boo Jiggy' | awk -v b="$string" '{for (i=1;i<=NF;i++) { if ($i == b) { print i } }}'

...でもない

string=*oo
echo 'Hi Boo Jiggy' | awk -v b="$string" '{for (i=1;i<=NF;i++) { if ($i == b) { print i } }}'

どんな提案がありますか?よろしくお願いします!

答え1

~代わりに正規表現のような一致のために==

 string=Bo*
 echo 'Hi Boo Jiggy' |
 awk -v b="$string" '{for (i=1;i<=NF;i++) { if ($i ~ b) { print i } }}'

出力

2

コメントで述べたように、*oo正規表現として定義されていません(シェル拡張には有効ですが)。

上記のコードを再利用するには、文字列をドットで初期化する必要があります。

string=.*oo

答え2

使用幸せ(以前のPerl_6)

または

~$ echo "Hi Boo Jiggy Boo" | raku -ne 'put .words.grep(/Bo./, :k)'
1 3

または

~$ echo "Hi Boo Jiggy Boo" | raku -ne 'my regex R { Bo. }; put .words.grep(/<R>/, :k)'
1 3

または

~$ echo "Hi Boo Jiggy Boo" | env string="Bo." raku -ne 'put .words.grep(/<{ %*ENV<string> }>/, :k)'
1 3

@Ed_Mortonが彼のコメントで指摘したように、*OPスターが何を表現したいのか完全には明確ではありません。正規表現の表記では、アスタリスクは、例の文字の「0個以上」のインスタンスです。したがって、一致がBo*一致BooしませんBob

BoOPがフォローしたいと思います。どの文字でBo.正規表現の表記法を使用します。違いを示すために、次の例はigg*正規表現の一致と一致の違いを示していますigg.

~$ echo "Hi Boo Jiggy Boo" | raku -ne 'say .words.match(/igg*/)'
「igg」
~$ echo "Hi Boo Jiggy Boo" | raku -ne 'say .words.match(/igg./)'
「iggy」

~$ echo "Hi Boo Jiggy Boo" | raku -ne 'my regex R { igg* }; say .words.match(/<R>/)'
「igg」
 R => 「igg」
~$ echo "Hi Boo Jiggy Boo" | raku -ne 'my regex R { igg. }; say .words.match(/<R>/)'
「iggy」
 R => 「iggy」

~$ echo "Hi Boo Jiggy Boo" | env string="igg*" raku -ne 'say .words.match(/<{ %*ENV<string> }>/)'
「igg」
~$ echo "Hi Boo Jiggy Boo" | env string="igg." raku -ne 'say .words.match(/<{ %*ENV<string> }>/)'
「iggy」

より多くの例については、下記のURLをご覧ください。

https://unix.stackexchange.com/a/711393/227738
https://raku.org

関連情報