열에 문자열이 포함된 열 번호

열에 문자열이 포함된 열 번호

이 질문과 관련하여, 문자열과 일치하는 열의 열 번호

특정 문자열이 포함된 열 번호를 얻고 싶습니다.

그들은 그 아래에서 일하지 않았어요.

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

관련 정보