節約テクノロジ >

bashで日本語UTF8文字列を禁則処理付きfoldで折りたたむ方法


最近の環境ではlinux/unix/MacOSのfoldコマンドもUTF8に対応していますが、句点や括弧のぶら下げや追い出しをしてくれません。ここでは日本語禁則処理をするfoldを紹介します。

目次

  1. 準備
  2. 使用例
  3. 備考
  4. コメント

準備

bash関数板

以下をコピーしてbash_profileにペーストします。

jfold(){ AC=$# AG=$1 perl -CS -ne 'use utf8;BEGIN{if($ENV{"AC"}>0){$f=$ENV{"AG"}}else{$f=20};$f*=2;}@b=split(//,$_);$i=0;while($c=shift(@b)){print $c;$i++;if(!($c=~/\p{ascii}/)){$i++;}if(($i>=($f-1) && !($b[0]=~/[,\)\])}、〕〉》」』】〙〗〟ゝゞーァィゥェォッャュョ ヮヵヶぁぃぅぇぉっゃゅょゎゕゖ‐゠–〜~\?!‼⁇⁈⁉・:;\/ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇷ゚ㇺㇻㇼㇽㇾㇿ々〻’”⦆»。.]/))||($b[0]=~/[(\([{〔〈《「『【〘〖〝‘“⦅«]/&&$i>=($f-3))){print "\n";$i=0;}}'; }

bashスクリプト板

以下をコピーしてターミナルにペーストするとjfoldという実行ファイルが出来るので、PATHが通った場所にコピーします。

cat <<'EOF' >jfold
AC=$# AG=$1 perl -CS -ne 'use utf8;BEGIN{if($ENV{"AC"}>0){$f=$ENV{"AG"}}else{$f=20};$f*=2;}@b=split(//,$_);$i=0;while($c=shift(@b)){print $c;$i++;if(!($c=~/\p{ascii}/)){$i++;}if(($i>=($f-1) && !($b[0]=~/[,\)\])}、〕〉》」』】〙〗〟ゝゞーァィゥェォッャュョ ヮヵヶぁぃぅぇぉっゃゅょゎゕゖ‐゠–〜~\?!‼⁇⁈⁉・:;\/ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹㇷ゚ㇺㇻㇼㇽㇾㇿ々〻’”⦆»。.]/))||($b[0]=~/[(\([{〔〈《「『【〘〖〝‘“⦅«]/&&$i>=($f-3))){print "\n";$i=0;}}'; 
EOF
chmod +x jfold
#

使用例

下記は全角10文字で折り返しています。数値を変えることで好きな数で折り返します。半角2文字で全角1文字と数えています。

> cat test.txt |jfold 10

最近の環境では「linu
x/unix/MacOS」の【fo
ld】コマンドも『UTF8』
に対応していますが、
句点や括弧のぶら下げ、
追い出しをしてくれま
せん。ここでは日本語
の禁則の処理をする
(jfold)を紹介します。

備考

禁則処理の文字はWikipediaの禁則処理の記事の記号を使用しています。もし自分で追加する場合はbashスクリプトの括弧の集まりの箇所に追加してお使いください。

jfoldの数値を省略した場合のデフォルトは20文字となります。

perlが古いと動かないと思います。

シェア

コメント

トップページ

節約テクノロジ > bashで日本語UTF8文字列を禁則処理付きfoldで折りたたむ方法