grep コマンドは、同じ文字で始まり、終わるすべての行を表示します。

grep コマンドは、同じ文字で始まり、終わるすべての行を表示します。

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

おすすめ記事