grep
同じ文字で始まり、終わるすべての行を表示する方法を知りたいです。
ベストアンサー1
POSIX的に:
pattern='\(.\).*\1
.'
grep -x -- "$pattern" file
行が無効なバイト文字で始まったり終わったりすると、動作しません。これを上書きするには、を追加できますLC_ALL=C
。ただし、LC_ALL=C
これはシングルバイト文字データに対してのみ機能します。
perl6
箱に入っていれば最高の道具のようです。
$ printf '\ue7\u301 blah \u107\u327\n121\n1\n123\n' |
perl6 -ne '.say if m/^(.).*$0$/ || /^.$/'
ḉ blah ḉ
121
1
無効な文字のためにまだ窒息しますが。
perl6
テキストを次のように変換して変更しますNFC
。
$ printf '\u0044\u0323\u0307\n' |
perl6 -pe '' |
perl -CI -ne 'printf "U+%04x\n", ord for split //'
U+1e0c
U+0307
U+000a
$ printf '\u0044\u0323\u0307\n' |
perl -pe '' |
perl -CI -ne 'printf "U+%04x\n", ord for split //'
U+0044
U+0323
U+0307
U+000a
内部的には、perl6
文字列NFG
(representatives)は、事前設定されていない文字を正しく処理するために設計された方法であるNormalization Form Grapheme
形式で格納されます。perl6
$ printf '\u0044\u0323\u0307\n' | perl6 -ne '.chars.say'
1
$ printf '\u0044\u0323\u0307\n' | perl6 -ne '.codes.say'
2