![Bash에서 일치하는 일본어 정규식(단순 범위)이 예상대로 작동하지 않습니다.](https://linux55.com/image/219264/Bash%EC%97%90%EC%84%9C%20%EC%9D%BC%EC%B9%98%ED%95%98%EB%8A%94%20%EC%9D%BC%EB%B3%B8%EC%96%B4%20%EC%A0%95%EA%B7%9C%EC%8B%9D(%EB%8B%A8%EC%88%9C%20%EB%B2%94%EC%9C%84)%EC%9D%B4%20%EC%98%88%EC%83%81%EB%8C%80%EB%A1%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
내 정규 표현식은 괜찮다고 확신하지만 bash에서는 작동하지 않습니다. 나는 그것을 사용하여 직접 만들었습니다.https://unicode.org/charts/. 보시다시피 awk에서는 잘 작동합니다.
다음은 일부 범위이므로 직접 확인할 필요가 없습니다. 특히 일본어를 이해하지 못하는 경우에는 더욱 그렇습니다.
히라가나 [ぁ-ゟ]
- 똑같아 どなにぬねのはばぱひびぴふぶぷへべぺほぼぽまむめもやゅゆょよりりれろゎわゐゑをんゔゕゖ>゙>゚__ゝゞゟ
가타카나 [゠-ヿㇰ-ㇿ! -○]
- ゠ァァいゥ웨에오카가키기크그케게코고사자시지즈세제소조타조타소치벳츠ヅTetrapod케넨보보보보푸푸헤베베・-ヽヾヿ
- ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇺㇻㇼㇽㇾㇿ
- ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRTUVWX YZ[\]^_`abcdefghhiiklスmnopqrstuvw 옥시{|}~ ⦅⦆。B」、・・FGHHIスJKス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