💨

【Bash】grep で拡張書記素クラスターを扱う

2024/06/20に公開

GUN grep は PCRE 2 をサポートしている。

echo -n がぎぐげご | uconv -x NFD | grep -oP '\X'
が
ぎ
ぐ
げ
ご

-o--only-matching-P--perl-regexp である

while read line のワンライナーを使うこともできる

echo -n がぎぐげご | uconv -x NFD | grep -oP '\X' | while read -r line; do echo $line; done
が
ぎ
ぐ
げ
ご

次のように書くこともできる。<(command) はプロセス置換(process substitution)と呼ぶ。

while read -r line; do echo $line; done < <(echo -n がぎぐげご | uconv -x NFD | grep -oP '\X')
が
ぎ
ぐ
げ
ご
while IFS= read -r ret
do
  echo $ret
done < <(echo -n がぎぐげご | uconv -x NFD | grep -oP '\X')

grep の出力結果を配列として格納するには readarray を使う。

readarray -t arr < <(echo -n がぎぐげご | uconv -x NFD | grep -oP '\X')
echo ${#arr[@]}
5
echo ${arr[@]}
が ぎ ぐ げ ご

echo ${arr[0]}

Discussion