列中包含字符串的列号

列中包含字符串的列号

与这个问题相关, 列中匹配字符串的列号

我想获取包含某个字符串的列号。

他们没有在下面工作,

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未定义为正则表达式(虽然对 shell 扩展有效)。

要重用上面的代码,字符串必须用点初始化。

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*明星想要代表什么。在正则表达式表示法中,星号是示例性字符的“零个或多个”实例。所以Bo*匹配Boo,但不匹配Bob

我怀疑OP想要Bo跟随任何字符,并且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

相关内容