🌞
Linux, shell 同字が2回以上繰返(連続)した文字列を含む行をgrep
Linux, shell 同字が2回以上繰返(連続)した文字列を含む行をgrep
2024-08-11
(1).何がしたかったか
- textファイル(文献)の中で、繰返して(連続して)使用されている「字」をgrepしたかった。
桃之夭夭 灼灼其華
之子于歸 宜其室家
このような羅列が6000行もあり、繰返して(連続して)使用されている「字」を知りたかった。この例なら「夭夭」「灼灼」
(2).結論
- できた。
- grep でいける
- sed でもいける
(3).環境
- Ubuntu 22.04
- GNU grep 3.7
- GNU sed 4.8
(4).grepで行マッチ
$ grep -E '(.)\1{1,}'
できた。繰り返しが2文字以上。
ファイル例
a.txt
《關雎》
關關雎鳩
在河之洲
窈窕淑女
君子好逑
參差荇菜
左右流之
窈窕淑女
寤寐求之
求之不得
寤寐思服
悠哉悠哉
輾轉反側
參差荇菜
左右采之
窈窕淑女
琴瑟友之
參差荇菜
左右芼之
窈窕淑女
鍾鼓樂之
$ grep -E '(.)\1{1,}' a.txt
關關雎鳩
繰返しが3文字以上にマッチなら、
$ grep -E '(.)\1{2,}'
だね。
(5).sedでもいけるのかも
grep でできるなら sed ででけるのではないか?
$ sed -r -e 's@(.)\1{1,}@\n> \1\n@g'
︙
> 字
︙
繰返し部分を
改行 > 字 改行
に変更。いけた。
加工しやすいパターンにすれば、抽出しやすくなる。
幸せだ。
$ sed -r -e 's@(.)\1{1,}@\n> \1\n@g' a.txt
《關雎》
> 關
雎鳩
sed オプションの順番注意
OK : sed -r -e
OK : sed -re
BAD: sed -er
BAD: sed -e -r
(6).他
grepもsedも色々できるね〜
以上
Discussion