ä»åã¯UNIXç³»ã§ã¯å®çªã®grepã§ããgrepã¯ããã¹ãæ€çŽ¢ãè¡ããŸããããªããšèšã£ãŠã匷åãªæ£èŠè¡šçŸã䜿ããã®ã倧ããªãã€ã³ãã§ãã䌌ããããªåèªãæ°åããã¿ãŒã³ãæã€æååã®æ€çŽ¢ã«å€§ããªåšåãçºæ®ããŸãããã¡ããæ£èŠè¡šçŸãäžæã«äœ¿ããã°ãã§ããããã§ããããããæ£èŠè¡šçŸã䜿ããã ãã§ãååã§ã¯ãªãããšæããŸããã ãããããã®åæ¯ãããããŠæžããŠãæ¬äººããæ£èŠè¡šçŸã«ç²ŸéããŠãããã§ããªããæ£èŠè¡šçŸã¯ãããããšããå ·åãªã®ã§ããã®ãã¿ãŒã³ããããããããªãããããšãããªãããããããããŸãããç¹ã«grepã¯éå»ã®çµç·¯ãããæåãç°ãªãå ŽåããããŸãããããŸã§ã®åæ¯ãã§äœãé£ãããã ãªãšæã人ãããã§ããããã§ããäœãšãªãåãã°çšãè¶³ããããšããããŸããäœãšãªãåãã°OK!ãšããã®ãããã®é£èŒãªã®ã§äœãããŸãæ€çŽ¢ã§ããªãã£ãå Žåã¯èª¿ã¹ãŠå匷ããã®ããããããããŸãããããŸãã«ä»ã¯ChatGPTãªã©ã®AIãã¢ã·ã¹ãããŠãããŸãã
ããŠãä»åããã¹ã¯ãããã®sampleãã£ã¬ã¯ããªã«ãµã³ãã«ãšãªãããã¹ããã¡ã€ã«ãå ¥ããŠãããŸãããŸããã«ã¬ã³ããã£ã¬ã¯ããªã¯sampleãã£ã¬ã¯ããªãšããŸããã³ãã³ããªãcd ~/Desktop/sampleã§ãã
æ£èŠè¡šçŸãšgrep
grepã䜿ãããªãã®ã¯æ£èŠè¡šçŸã䜿ãããªããããªäžé¢ãããé£ãããšããããããŸãããããããæ£èŠè¡šçŸèªäœãé£ããéšåããããŸãããæ£èŠè¡šçŸã«ã€ããŠã ãã§äžåã®æ¬ãåºãŠããã»ã©ã§ãã
ãããã1990幎代以éã®ããã°ã©ã èšèªãã¢ããªã±ãŒã·ã§ã³ã«ã¯æšæºã§æ£èŠè¡šçŸãå©çšã§ãããã®ããããŸããäžã«ã¯ããã°ã©ã ã§æ£èŠè¡šçŸã䜿ã人ãããã§ãããããã®å Žåãããã§å¹ã£ãæ£èŠè¡šçŸã®ç¥èã¯æŽ»çšã§ããŸãããã§ã«ãã®ãããªç¥èãããŠããŠãæã£ãŠãã人ãªã容æã«grepã䜿ãããªãããããããŸããã
ã§ãããŸã£ããæ£èŠè¡šçŸãªããŠäœ¿ã£ãäºããªããšãã人ãããã§ããããç§ããããªã«å€çšããããã§ã¯ãªãå¿ èŠã«å¿ããŠäœ¿ãçšåºŠã§ãã
æ£èŠè¡šçŸã¯é£ãããšèšãå Žåã¯äººå·¥ç¥èœ(AI)ãµãŒãã¹ãå©çšããæ¹æ³ããããŸããäŸãã°ChatGPT/Geminiã ãšä»¥äžã®ããã«ãããšæ£èŠè¡šçŸäŸãæç€ºããŠãããŸããgrepã®åèªãæå®ãããšãªãã·ã§ã³ä»ãã§æç€ºããŠãããŸããããã¯äŸ¿å©ã§ããããããµãŒãã¹ãšèšããã§ãããããªããAIãAIã®ã¢ãã«ã«ãã£ãŠåçãç°ãªãããšããããŸãã
ãgrepã§è¥¿æŠ4æ¡ãš2æ¡ã®æã«ãããããæ£èŠè¡šçŸãæããŠãã ãããã
grep -E '[0-9]{4}-(0[1-9]|1[0-2])' file.txt
grep \b[0-9]{4}-(0[1-9]|1[0-2])\b date.txt
20äžçŽãšéãä»ã§ã¯æ£èŠè¡šçŸãé§äœ¿ãããããããã°ã©ã èšèªãå©çšããæ¹ãããå ŽåããããŸããæãšéã£ãŠã¡ã¢ãªããã£ã¹ã¯å®¹éãåŠçé床ãªã©ã®å¶çŽãå°ãªããªã£ãã®ã§grepã驿驿ã§äœ¿ãã°ããã§ãããããŸããäžèšã®ããã«AIãæŽ»çšããã®ã21äžçŽã®ããæ¹ãããããŸããã
æ£èŠè¡šçŸãªãã§æ€çŽ¢
ããŸãã¯æ£èŠè¡šçŸãªãã§grepæ€çŽ¢ããŠã¿ãŸããããgrepãšèšãã©ãæ£èŠè¡šçŸã䜿ããªããã°é£ãããªãããšããäºã§ããæ£èŠè¡šçŸã§ãªããã°åçŽãªéšåäžèŽæ€çŽ¢ã«ãªããŸãã
ããªããä»åã¯æ¥æ¬èªã¯æ±ããã«çŽç²ã«è±æ°åãšèšå·ã®ã¿ãšããŠããŸãã
ãgrepã¯ãã¡ã€ã«åïŒãã¡ã€ã«ãã¹ïŒãæå®ããŠæ€çŽ¢ããã ãã§ãªããæšæºå
¥åããã®æååãæ€çŽ¢ããããšãã§ããŸããgrepã䟿å©ã§å€çšãããã®ã¯æšæºå
¥åããã®ããŒã¿ãæ±ãããããšããçç±ãããã§ãããã
ããŸããã«ã¬ã³ããã£ã¬ã¯ããªã«ããããã¹ããã¡ã€ã«ã®sample1.txtã®å
å®¹ãæ€çŽ¢ããŠã¿ãŸããããsample1.txtã®å
容ã¯ä»¥äžã®ããã«ãªã£ãŠããŸãã1è¡ç®ãæ¥ä»çã®ããããŒã«ãªã£ãŠããŠã2è¡ç®ä»¥éã3åã§ã¿ãåºåãã«ãªã£ãŠããããŒã¿ã§ãã
sample1.txt(â»è¡šç€ºã§ã¯ã¹ããŒã¹ã«ãªã£ãŠããŸãããå®éã¯ã¿ãåºåãã§ããviã§ã¯:%s/ /\t/gã§çœ®æã§ããŸã)
test data 2022/02/22
abTest1 5 $1.2
abTest2 45 $1.1
abTest3 98 $3
abtest4 3 $0.7
abtest5 14 $0.35
bbTest06 100 \1
bbTest07 200 \2
cbTest08 400 \4
cbTest09 999 \9
ãæåã«æ€çŽ¢ããæåã¯aã®äžæåã§ãã以äžã®ããã«ãããšã«ã¬ã³ããã£ã¬ã¯ããªã«ããsample.txtãã¡ã€ã«å
ã«ããæååããaã®æåãæ€çŽ¢ããŸããããã§aã®æåãå²ãèšå·ã¯'ïŒã·ã³ã°ã«ã¯ãªãŒããŒã·ã§ã³ïŒã§ãã以äžã®äŸã§ã¯"ïŒããã«ã¯ãªãŒããŒã·ã§ã³ïŒã§å²ãã§ãçµæã¯åãã§ãã"ïŒããã«ã¯ãªãŒããŒã·ã§ã³ïŒã¯æååå
ã«èšå·ãå«ãŸããå Žåã«åäœãç°ãªããŸããããã«ã€ããŠã¯åŸã»ã©èª¬æããŸãã
以äžã®ã³ãã³ããå®è¡ãããšäžèŽããæåãããè¡ãåºåãããŸããgrepã§ã®æ€çŽ¢ã¯è¡åäœã§åŠçãããŸãã
grep 'a' sample1.txt
äžèŽããæåããªãå Žåã¯äœãåºåãããŸããã
grep 'p' sample1.txt
äžæåã®æ€çŽ¢ã§ã¯ãªãè€æ°ã®æåã®æ€çŽ¢ãã§ããŸããåœç¶ãšèšãã°åœç¶ã§ãããæ€çŽ¢ããæåã«ãã£ãŠã¯æ³šæããªããšãããªãäºããããŸãã
ãŸãã¯ããªãã®åé¡ããªãè€æ°æåã®æ€çŽ¢ãããŠã¿ãŸãããããã¡ããåé¡ãçºçããªãè±æ°åã®ã¿ã®çµã¿åããã§ãã以äžã®äŸã§ã¯ã«ã¬ã³ããã£ã¬ã¯ããªã«ããsample1.txtãã¡ã€ã«ãããabTest1ã®æååãæ€çŽ¢ãçµæã衚瀺ããŸãã
grep 'abTest1' sample1.txt
abTest1ã®æååãå«ãŸããã®ã¯äžè¡ãããããŸããã®ã§æåŸ éãã®çµæã«ãªã£ãŠããŸããããã§ã¯æ¬¡ã«ããã¹ããã¡ã€ã«å ã«ããåè§ããã¯ã¹ã©ãã·ã¥ãæ€çŽ¢ããŠã¿ãŸãããã
grep '\' sample1.txt
ã³ãã³ããå ¥åãããšä»¥äžã®ãããªãšã©ãŒã衚瀺ãããŠããŸãæ€çŽ¢ãå®è¡ãããŸããã
grep: Trailing backslashããLinux/Ubuntuã
grep: trailing backslash (\)ããmacOSã
äœããããªãã£ãã®ããšãããšãããã¯ã¹ã©ãã·ã¥ã¯åŸã«ç¶ãæåããšã¹ã±ãŒãããããã«äœ¿ãããèšå·ã ããã§ãããã®ãããæååå ã«ããããã¯ã¹ã©ãã·ã¥ãæ€çŽ¢ããå Žåã¯ä»¥äžã®ããã«ããã¯ã¹ã©ãã·ã¥ã2ã€é£ç¶ããŠæžãå¿ èŠããããŸãã
grep '\\' sample1.txt
ä»åºŠã¯ããã¯ã¹ã©ãã·ã¥ãå«ãŸããè¡ãåºåãããŸãããäžéšã®èšå·ïŒ$ã\ïŒã«ã¯ããã¯ã¹ã©ãã·ã¥ãã€ããå¿ èŠããããŸããããã®ãããªèšå·ãåºãŠãããã³ã«ããã¯ã¹ã©ãã·ã¥ãä»ããŠãããèªã¿ã«ãããªã£ãŠããŸããŸãããããªæã«äŸ¿å©ãªFãªãã·ã§ã³ããããŸãã以äžã®ããã«çŽç²ã«æ€çŽ¢ããæåãæå®ããã ãã§ãã
grep -F '\' sample1.txt
çµæã¯æåŸ éãã«ãªã£ãŠããŸãããããŸã§ã¯æ£èŠè¡šçŸãªãã§ã®æ€çŽ¢ã§ããæ€çŽ¢æååãå€ããŠããããæ€çŽ¢ããŠã¿ãŠãã ããããã ããæ€çŽ¢æåã¯"ïŒããã«ã¯ãªãŒããŒã·ã§ã³ïŒã§å²ãŸãªãã§ãã ããã"ïŒããã«ã¯ãªãŒããŒã·ã§ã³ïŒã§å²ããšæå®ããæåã«ãã£ãŠåäœãå€ãã£ãŠããŸãããã§ãïŒããã¯ã·ã§ã«ã«ãã£ãŠgrepã«æž¡ãåã«æååãåŠçãããŠããŸãããïŒãäŸãã°$ãæ€çŽ¢ãã以äžã®ãããªãã¿ãŒã³ã§ãã
grep "\\\$" sample1.txt
ãâïŒbash,zshã§"ã"å
ãåŠçãã以äžã®ããã«å€æïŒ
grep \$ sample1.txt
ãâ
\$ã¯grepã§ã¯$ã®æååäœãšããŠæ€çŽ¢ããã
å®å šäžèŽæ€çŽ¢
ãéšåäžèŽæ€çŽ¢ãã§ãããªãå®å
šäžèŽæ€çŽ¢ãããããšèããã®ã¯åœç¶ã§ããå®å
šäžèŽæ€çŽ¢ã®å Žåãæ£èŠè¡šçŸãå©çšããããšã«ãªããŸãããç°¡åãªã®ã§å
ã«ãã£ãŠããŸããŸããããããã ãã§èª¬æã¯åŸåãã«ããŸãã
grepã®å®å
šäžèŽæ€çŽ¢ã¯è¡ã«å¯ŸããŠè¡ããŸãã®ã§è¡é ããè¡æ«ãŸã§äžèŽãããããã«æå®ããŸãã
ããã§ã¯ä»¥äžã®è¡ã®å
容ã«å®å
šã«äžèŽãããããã«æ€çŽ¢ããŠã¿ãŸãããã
abTest2 45 $1.1
ãã®å Žåãå
é ããè¡æ«ãŸã§ãªã®ã§å
é ã«^èšå·ãæ«å°Ÿã«$ãæå®ããŸãããªããæ€çŽ¢ããæååå
ã«$ãªã©æ£èŠè¡šçŸã§äœ¿ãã¡ã¿æåãå«ãŸããŠããå Žåã¯ããã¯ã¹ã©ãã·ã¥ã§ãšã¹ã±ãŒããããå¿
èŠããããŸãã
ãŸããæååå
ã«ã¿ãã³ãŒããå«ãŸããŠããå Žåã\tã®ããã«ãšã¹ã±ãŒããããå¿
èŠããããŸãã
ã€ãŸãã以äžã®ããã«æå®ããã°å®å
šäžèŽæ€çŽ¢ã«ãªããŸããmacOSã®å Žåã¯-Pãæå®ããªããŠããããããŸãããLinuxã§ã¯-Pãæå®ããªããšãããããŸããã
grep -P '^abTest2\t45\t\$1\.1$' sample1.txt
æ£èŠè¡šçŸã䜿ã£ãŠæ€çŽ¢
ãããã§ã¯æ£èŠè¡šçŸã䜿ã£ãŠæååãæ€çŽ¢ããŠã¿ãŸããããä»ã§ã¯å€ãã®ããã°ã©ã èšèªã§äœ¿ããæ£èŠè¡šçŸã§ãããæŽå²çãªéœåã§grepã«ã¯åºæ¬æ£èŠè¡šçŸãšæ¡åŒµæ£èŠè¡šçŸãPerlæ¡åŒµè¡šçŸããããŸããçŸåšã®ããã°ã©ãã³ã°èšèªçã«æ
£ããŠããŠæ£èŠè¡šçŸã䜿ãå Žåã¯æ¡åŒµæ£èŠè¡šçŸã®ãªãã·ã§ã³ã§ããEãæå®ããŠgrepã䜿ã£ãã»ããç¡é£ãããããŸããã
ãä»åºŠã¯sample1.txtã«è¡ã远å ããŠä»¥äžã®ããã«ãããµã³ãã«ããã¹ãã䜿ããŸãããã®ãã¡ã€ã«ã¯sample2.txtãšããååã«ãªã£ãŠããŸãã
sample2.txt(â»è¡šç€ºã§ã¯ã¹ããŒã¹ã«ãªã£ãŠããŸãããå®éã¯ã¿ãåºåãã§ããviã§ã¯:%s/ /\t/gã§çœ®æã§ããŸã)
test data 2022/2/22
abTest01 50 $1.2
abTest02 45 $1.1
abTest03 98 $3
abtest04 30 $0.7
abtest05 14 $0.35
bbTest06 100 \1
bbTest07 200 \2
cbTest08 400 \4
cbTest09 999 \9
ddTest01 1024 12yen
ddTest02 4096 240yen
ddTest02 256 240yen
yenTest01 987 128
yenTest02 215 880yen
yenTest02 314 128Yen
yenTest03 2718 128YEN
ãæ£èŠè¡šçŸã䟿å©ãªã®ã¯3æ¡ã®æ°åã ãæ€çŽ¢ãããç¹å®ã®æåã§å§ãŸãç¹å®ã®æåã§çµãããªã©æ€çŽ¢ããæååã«æ¡ä»¶ãä»ããããšãã§ããããã§ããæ¡ä»¶å€æã¯ããã°ã©ã ã®åŸæãšãããšããã§ãããæ£èŠè¡šçŸã¯ããããããã°ã©ã ãçµãŸãªããŠãæè»œã«äœ¿ããã®ã§äŸ¿å©ã§ãã
ããŸããç¹å®ã®æåããå§ãŸãæååã«ããããããŠã¿ãŸãããã
ãå
ã»ã©ã®ããã¹ããã¡ã€ã«ã«ãã4æ¡ã®æ°åãããè¡ã ããæœåºããŠã¿ãŸãããã以äžã®ããã«ã³ãã³ããå
¥åããŸãã[0-9]ã¯9ãã9ãŸã§ã®æ°åã«ãããïŒäžèŽïŒããäºãæå³ããŸãã[ ]å
ã«æåãæå®ãããšããã®æåãããã¯ç¯å²ãªã©ã«ããããããäºãã§ããŸãã
grep '[0-9][0-9][0-9][0-9]' sample2.txt
æ¡åŒµæ£èŠè¡šçŸã䜿ã£ãŠããªãã®ã§ãåé·ãªæžãæ¹ã«ãªã£ãŠããŸããããã100æ¡ã®æ°åã«ããããããšãªããšæžãã®ã倧å€ã§ãã
ããã§äŸ¿å©ãªã®ãæ¡åŒµæ£èŠè¡šçŸã§ããä»ã®ããã°ã©ã èšèªãªã©ã§ã¯åœããåã«äœ¿ãã{ }ã®èšè¿°æ¹æ³ã§ãããgrepã®å Žåã¯Eãªãã·ã§ã³ãæå®ããå¿ èŠããããŸãã{ }ã®äžã«æ°åãæžããšçŽåã®ã¡ã¿æåã®ç¹°ãè¿ãã«ãªããŸããã¡ã¿æåãšããã®ã¯æ£èŠè¡šçŸã§äœ¿çšãããç¹å¥ãªæåã®äºã瀺ããŸããããªãªããããã¯ã¹ã©ãã·ã¥ããã©ã±ããïŒæ¬åŒ§ïŒã$èšå·ãªã©ã該åœããŸãã
grep -E '[0-9]{4}' sample2.txt
ãäžèšã®ã³ãã³ããå®è¡ãããš4æ¡ã®æ°åãããè¡ã ãã衚瀺ãããŸãã
ããŠæåŸ
éãã®çµæã«ã¯ãªã£ããã®ã®ãããªã[0-9]ãšã{4}ãšããåºãŠããŠããããªãïŒãšãã人ãããã§ãããã
ãŸãã[ ]ã®èšå·ã§ãããããã¯ã«ãã³å
ã«ããããããã®æåã察象ã«ãªããŸãããŸã-ã䜿ããšç¯å²ã瀺ãããšã«ãªããŸãã[0-9]ãªã0ãã9ãŸã§ã®æåïŒã³ãŒãïŒã«ãªããŸãã[A-Z]ãªãè±å€§æåã®AããZãŸã§ã®æååã«ãªããŸãããªãããã®å Žå察象ã«ãªãã®ã¯1æåã®ã¿ã§ãã
次ã«{ }ã§ãããããã¯çŽåã«æå®ãããæåãªã©ã®ç¹°ãè¿ãåæ°ã瀺ããŸããa{2}ãªãaã2åç¹°ãè¿ããããb{4}ãªãbã4åç¹°ãè¿ããããšããæå³ã«ãªããŸããä»ã«ãa{4,}ãšãããš4å以äžãšãã£ãæå³ã«ãªããŸããããšããããä»åã¯ãã®èª¬æã§åããããšæããŸãã
ãã£ãããªã®ã§AI (ChatGPT/Gemini)ã䜿ã£ãŠã¿ãŸãããã
ãããã¹ãã®éäžã®4æ¡ã®æ°åã«ãããããgrepã®æ£èŠè¡šçŸãæããŠãã ããã
grep -E '[0-9]{4}' file.txt
grep -E '\b[0-9]{4}\b' file.txt
AIãæ¬åœã«æ£ããçãã瀺ããŠããããªãäžæãªè§£èª¬æç« ãèªãããããã®ãããããŸãããããæã ééã£ãããšãå¹³æ°ã§åºåããŠããããšãããã®ã§ãçŸç¶ã§ã¯èªåã§ãåŠç¿ããŠãããªããšãæ£ãããã©ããã®å€æãã§ããŸããã
ä»åã®4æ¡ã®æ°åã«ãããããæ£èŠè¡šçŸã¯AIãçããåºããŠãããŸããããã ããçãã¯1ã€ã ãã§ã¯ãªãè€æ°ããå ŽåããããŸãããŸããmacOSã«å ¥ã£ãŠããgrepã®ããŒãžã§ã³ïŒgrep (BSD grep, GNU compatible) 2.6.0-FreeBSDïŒã§ã¯ãªãã·ã§ã³æå®ãªãã§ã以äžã®ããã«æå®ããŠãåäœããŸãããã€ãã䜿ããã®ãåãããŸããããåèäŸãšããŠèŒããŠãããŸããæ£èŠè¡šçŸã䜿ããããã°ã©ã èšèªããšãã£ã¿ã»ããŒã«ã»ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã¡ãã®æ¹ãããªãã¿ãããããŸããã
grep -E '\d{4}' sample2.txt
ãªããPãªãã·ã§ã³ãæå®ããã°å€ãã®grepã§ãåæ§ã«\dãªã©ã®ã¡ã¿æåã䜿ãäºãã§ããŸããããã¯Perlæ¡åŒµæ£èŠè¡šçŸã䜿ãäºã瀺ããŠããŸãããã®å ŽåãEã®ãªãã·ã§ã³ã¯äžèŠã§ãã
grep -P '\d{4}' sample2.txt
ããšãgrepã¯ããŒãžã§ã³çã«ãã£ãŠåäœãç°ãªãéšåããããŸããåçŽãªæ€çŽ¢ãç°¡åãªæ£èŠè¡šçŸã§ããã°åºæ¬ã¯å€ãããªãã®ã§ãããäœããããããšæã£ããïŒãããã¯æåããç¥èãšããŠç¥ã£ãŠããå¿ èŠæ§ãæãããªãïŒgrepé¢é£ã§æ€çŽ¢ããŠèª¿ã¹ãŠããã®ãããã§ãããã
ãšããäºã§ä»åã®grepã¯ãããŸã§ã§ãã
èè ãä»²ææ¬¡é
ãããããªäºã«æãåºããŠã¿ããã®ã®çµå±èº«ã«ã€ããããšããããç®çã®äºãã§ããã°ããããããªããã¿ãããªæãã§çããŠãããŸãã













