豚ラテン語の電卓を作ろうとするが、特定の部分で詰まっていますね。 「apple」という文字列があるとしましょう。変換するには、最後に「way」を追加すると「appleway」になります。これまでこの部分を終えました。
私が付いているのは「スポーツ」のような文字列です。これを行うには、最後の最初のコレクションの前に子音を置き、「ay」を追加すると「ortsspay」になります。
文字列が正しく変換されるように、最初のコレクションの前に子音を取得する方法はわかりません。
答え1
パラメータを使用した拡張bash
:
${var%%[AaEeIiOoUu]*}
- パターンは、
[AaEeIiOoUu]*
貪欲に(%%
)右側の変数から一致する部分を削除しますvar
。ここでは、大文字または小文字の集合([AaEeIiOoUu]
)で始まり、その後に何も(*
)が続きます。
例:
$ var=sports
$ echo "${var%%[AaEeIiOoUu]*}"
sp
$ var=foobar
$ echo "${var%%[AaEeIiOoUu]*}"
f
答え2
$ echo "sports" | sed 's/.*\([a-z]\)[aeiouAEIOU].*/\1/'
p
ワイルドカードが多すぎます。
$ echo "spozzzzzzzzzo" | sed 's/\([a-z]\)[aeiouAEIOU].*/\1/'
sp
@Fiximan、それはよく分からない。
$ echo "spozzzzzzzzzo" | sed 's/\(b-df-hj-np-tv-z\{1,\}\)[aeiou].*/\1/'
spozzzzzzzzzo
@Sundeepはい、うまくいきます...
$ echo "spozzzzzzzzzo" | sed 's/\([^aeiou]*\).*/\1/i'
sp
私はheemaylの元のbash +1を好むと言わなければなりません。とても良いです!