私の正規表現は大丈夫だと確信していますが、bashでは機能しません。私はそれを使って自分で作りました。https://unicode.org/charts/。ご覧のとおり、awkではうまく動作します。
以下は一部の範囲なので、直接確認する必要はありません。特に日本語がわからない場合にはさらにそうです。
ひらがな [ぁ-ゟ]
- まったく同じですね。
カタカナ【゠-ヿㇰ-ㇿ! -○]
- ゠아아이웨에오카가키기크그게게고사자시지즈洗剤ソゾタゾタソチベッツヅTetrapodケネンボボボボプフヘベベ・-ヽヾヿ
- ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ
- ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRTUVWX YZ[\]^_`abcdefghhiiklスンノプクルスチュウ オキシ{|}~}~ }~ LMNO |ᅣᅤᅥᅦᅧᅨᅩᅪᅫᅬᅭᅮᅯᅰᅱᅲᅳᅴᅵ¢£¬ ̄ ¦ \\¥│←↑→↓ð○
また、漢字を見つける正規表現もありますが、[一-龥]
この正規表現はbashで期待どおりに機能します。問題を正確に特定するために追加したコメントです
。>>> wrong!
[[ "する" =~ [ぁ-ゟ] ]] && echo 'is hiragana' || echo 'is not hiragana'
is hiragana
echo 'する' | awk '/[ぁ-ゟ]/ {print "is hiragana"}'
is hiragana
[[ "スル" =~ [ぁ-ゟ] ]] && echo 'is hiragana' || echo 'is not hiragana'
is hiragana >>> wrong!
echo 'スル' | awk '/[ぁ-ゟ]/ {print "is hiragana"}'
[[ "僕" =~ [ぁ-ゟ] ]] && echo 'is hiragana' || echo 'is not hiragana'
is not hiragana
echo '僕' | awk '/[ぁ-ゟ]/ {print "is hiragana"}'
[[ "する" =~ [゠-ヿㇰ-ㇿ!-○] ]] && echo 'is katakana' || echo 'is not katakana'
is katakana >>> wrong!
echo 'する' | awk '/[゠-ヿㇰ-ㇿ!-○]/ {print "is katakana"}'
[[ "スル" =~ [゠-ヿㇰ-ㇿ!-○] ]] && echo 'is katakana' || echo 'is not katakana'
is katakana
echo 'スル' | awk '/[゠-ヿㇰ-ㇿ!-○]/ {print "is katakana"}'
is katakana
[[ "僕" =~ [゠-ヿㇰ-ㇿ!-○] ]] && echo 'is katakana' || echo 'is not katakana'
is not katakana
echo '僕' | awk '/[゠-ヿㇰ-ㇿ!-○]/ {print "is katakana"}'
bashがひらがなとカタカナを同じだと思うようにあらかじめ変換しているような気がしますか?
答え1
必要なスクリプトがあります。
string1="する"
string2="スル"
if echo "$string1" | grep -P '[ぁ-ゟ]' >/dev/null; then
echo 'is hiragana'
else
echo 'is not hiragana'
fi
if echo "$string2" | grep -P '[ぁ-ゟ]' >/dev/null; then
echo 'is hiragana'
else
echo 'is not hiragana'
fi
if echo "$string1" | grep -P '[゠-ヿㇰ-ㇿ!-○]' >/dev/null; then
echo 'is katakana'
else
echo 'is not katakana'
fi
if echo "$string2" | grep -P '[゠-ヿㇰ-ㇿ!-○]' >/dev/null; then
echo 'is katakana'
else
echo 'is not katakana'
fi