Grepは大文字で連続した単語を探します。

Grepは大文字で連続した単語を探します。

大文字で始まる2つの連続した単語を見つけようとしています。

はい

入力する:x Yyy Zzz xx y

出力:Yyy Zzz

これで、すべての大文字を見つけることができますcat txtfile.txt | grep -o '\<[A-Z][a-z]*\>'

出力を取得するには、コードをどのように変更しますか?

フレンドリーな安否

ベストアンサー1

Raku(以前のPerl_6)の使用

raku -ne 'my @a = .words.rotor(2 => -1); for @a {.put if $_ ~~ $_.map(*.wordcase)};'  

入力例:

x Yyy Zzz xx y
x Yyy Zzz Www
a Mmm: Yyy bbb
aaa aaa aaa
Ccc ccc CCC
Bbb Bbb Bbb Bbb

出力例:

Yyy Zzz
Yyy Zzz
Zzz Www
Mmm: Yyy
Bbb Bbb
Bbb Bbb
Bbb Bbb

この呼び出しは.wordsRaku にスペースで入力行を分割するよう指示します。単語はrotor一緒にグループ化されます。このrotorパラメータは、(2 => -1)単語が重なる隣接ペアとして扱われ、重複する単語の連続ペアがそれぞれ生成されるように指示します。

単語ペアは$_トピック変数にロードされ、一致するかどうかテストされます$_.map(*.wordcase)。つまり、各単語(最初の文字)が大文字で示されている独自のバージョンと一致するかどうかがテストされます。一致するものがある場合は、$_大文字(最初の文字)の単語のペアでなければならず、その単語のペアが返されます。

1行ずつ返す必要がある場合は、次のように.put呼び出しを置き換えることができます(例print "$_, ":)。uniqueRakuには固有の単語のペアだけが必要な場合でもルーチンがあります。

https://docs.raku.org/routine/wordcase
https://docs.raku.org/routine/rotor
https://raku.org

おすすめ記事