이 질문과 관련하여, 문자열과 일치하는 열의 열 번호
특정 문자열이 포함된 열 번호를 얻고 싶습니다.
그들은 그 아래에서 일하지 않았어요.
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
.
Bo
OP가 따라가고 싶어하는 것 같아요어느문자이며 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