Mastering Shell Scripting: Comprehensive Guide
You are an expert shell scripting and command-line tutor. Your job is to help me master shell scripting, one-liners, and practical command-line techniques for my work.
In this thread, I will provide shell commands or topics that I would like to learn. For each one, please provide a comprehensive explanation that is thorough enough that I wonât need to consult any other resources. The explanation should cover:
- Core functionality and purpose
- All options and features (except extremely obscure ones), with clear descriptions
- Examples that cover every single option or feature you provided above, mixing basic to advanced, each with expected output or behavior
- Common use cases and best practices
- Potential pitfalls or gotchas to avoid
For all features and examples:
-
Mark any non-POSIX features with [Non-POSIX]
-
Specify the shell name for shell-specific features (e.g., [bash], [zsh], [ksh], [fish], etc.)
-
Tag implementation/platform differences if needed (e.g., [GNU], [BSD], [BusyBox], [macOS], [Linux], etc.)
Include at least 5 exercises of varying difficulty levels with solutions at the end.
Please provide complete, self-contained explanations in each response (donât split them across multiple messages). For this first response only, please confirm that you understand these instructions without providing examples. From the second message onward, provide full explanations with examples and outputs. Please reply in Japanese.
æ¿ç¥ããŸããã ä»åŸã¯ãåã·ã§ã«ã³ãã³ãããããã¯ã«ã€ããŠã以äžã®å 容ãçã蟌ãã å æ¬çãªè§£èª¬ãè¡ããŸãïŒ
-
ã³ã¢ãªæ©èœãšç®ç
-
äž»ãªãªãã·ã§ã³ãæ©èœïŒæ¥µç«¯ã«ãã€ããŒãªãã®ãé€ããå šãŠç¶²çŸ ããŠæç¢ºã«èª¬æïŒ
-
å ·äœäŸïŒäžèšã®å šãªãã·ã§ã³ãæ©èœãç¶²çŸ ãã圢ã§ãåºæ¬çãªäœ¿ãæ¹ããäžçŽè åããã¯ããã¯ãŸã§ç€ºããããããæåŸ ãããåºåãåäœãèšèŒïŒ
-
äžè¬çãªäœ¿çšäŸãšãã¹ããã©ã¯ãã£ã¹ïŒå®åã§ã®æŽ»ç𿹿³ãå¹ççãªäœ¿ãæ¹ã®ææ¡ïŒ
-
泚æç¹ãèœãšã穎ïŒèª€çšããããç¹ãé¥ããã¡ãªãã¹ããã®åé¿çïŒ
ãŸãã説æå
ã§ã¯POSIXæšæºå€ã®æ©èœã«ã¯ [Non-POSIX] ãšæèšããã·ã§ã«åºæã®æ©èœïŒäŸïŒ[bash], [zsh] ãªã©ïŒã¯è©²åœã·ã§ã«åãã¿ã°ãšããŠä»ãå ããŸããGNU/BSDãBusyBoxããã©ãããã©ãŒã ïŒ[Linux], [macOS] çïŒã®å®è£
å·®ãããå Žåãé©å®æ³šéããæç¢ºã«åºå¥ããŸãã
æåŸã«ãåãããã¯ã«é¢ããŠå°ãªããšã5åã®ç·Žç¿åé¡ïŒé£æåºŠã¯åçŽããäžçŽãŸã§ïŒãäœæãããã®è§£çãšè§£èª¬ãåçã®æ«å°Ÿã«ç€ºããŸãããããã®åçã¯å šãŠäžã€ã®ã¡ãã»ãŒãžå ã§å®çµããããã«ããä»ã®è³æãåç §ããªããŠãååçè§£ã§ããå 容ãç®æããŸããä»åŸãšããããããé¡ãããããŸãã
sed
sedã³ãã³ã培åºè§£èª¬
sedã¯ã¹ããªãŒã ãšãã£ã¿ïŒstream editorïŒãšåŒã°ãã匷åãªããã¹ãåŠçããŒã«ã§ããã³ãã³ãã©ã€ã³äžã§ãã¡ã€ã«ãå
¥åã¹ããªãŒã ã®ããã¹ããé察話çã«ç·šéããç®çã§èšèšãããŠããŸããsedã䜿ããšãããã¹ãã®æ€çŽ¢ã»çœ®æãè¡ã®åé€ã»æ¿å
¥ãç¹å®ç¯å²ã®æœåºãªã©ã**ã¯ã³ã©ã€ããŒïŒäžè¡ã³ãã³ãïŒ**ã§å®çŸã§ããã·ã§ã«ã¹ã¯ãªãããããŒã¿å å·¥ã®çŸå Žã§å¹
åºãå©çšãããŠããŸãã
以äžãsedã®åºæ¬ããé«åºŠãªæ©èœãŸã§ã詳ãã解説ããŸãã
ã³ã¢ãªæ©èœãšç®ç
-
ã©ã€ã³æåã®ããã¹ãåŠç:
sedã¯å ¥åãäžè¡ãã€èªã¿èŸŒã¿ãåè¡ã«å¯ŸããŠæå®ãããç·šéã³ãã³ããé©çšããŸãïŒå¿ èŠã«å¿ããŠè€æ°è¡ãçµåããŠåŠçãå¯èœïŒãèªåçã«æ¬¡ã ãšåŠçãè¡ãããã倧ããªãã¡ã€ã«ã§ãã¡ã¢ãªå¹çè¯ãæ±ããŸãã -
é察話çç·šé: ããã¹ããšãã£ã¿ã®ããã«äººãå 容ãèŠãªããç·šéããã®ã§ã¯ãªãã
sedã¹ã¯ãªããïŒã³ãã³ãã®çµã¿åããïŒã«åŸã£ãŠæ©æ¢°çã«å€æããŸããããã«ããã倿°ã®ãã¡ã€ã«ãžã®äžæ¬çœ®æãå®åçãªãã°å€æãªã©ãèªååã§ããŸãã -
ãã€ãã©ã€ã³ãšã®é£æº: ä»ã®ã³ãã³ããšãã€ãïŒ
|ïŒã§ç¹ããgrepãawkãsortãªã©ãšçµã¿åãããŠé«åºŠãªããŒã¿åŠçãå¯èœã§ããæšæºå ¥åããåãåã£ãããŒã¿ãåŠçããæšæºåºåã«çµæãæµããããäžéãã¡ã€ã«ãäœããã«æžã¿ãŸãã -
ããã¹ã倿ã®å€åœ©ãªæ©èœ: åçŽãªæååã®çœ®æã ãã§ãªããæ£èŠè¡šçŸã«ããæè»ãªãããã³ã°ãç¯å²æå®ã«ããéšåç·šéãååŸã®è¡ãåç §ããå å·¥ãªã©ãæ§ã ãªç·šéæäœããµããŒãããŠããŸãã
-
ã¹ã¯ãªãããšããŠã®å©çš: äžé£ã®
sedã³ãã³ãããã¡ã€ã«ã«ãŸãšãã-fãªãã·ã§ã³ã§èªã¿èŸŒãã°ã¹ã¯ãªãããšããŠè€éãªå€æåŠçãå®çŸã§ããŸããé©åã«äœ¿ãã°ç°¡æçãªããã°ã©ãã³ã°èšèªã®ããã«ã«ãŒããæ¡ä»¶åå²ãå¯èœã§ãã
äž»ãªãªãã·ã§ã³ãšæ©èœ
sedã®ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ãšäž»ãªæ©èœã以äžã«ãŸãšããŸãïŒæ¥µç«¯ã«ãã€ããŒãªãã®ãé€ãç¶²çŸ
ïŒãäžéšã®æ©èœã«ã¯POSIXæšæºå€ã®æ¡åŒµãããããã®å Žåã¯**[Non-POSIX]ãšèšèŒããŸãããŸãGNUçãBSDçãªã©å®è£
å·®ãããå Žåã¯[GNU]**, [BSD], [BusyBox], **[macOS]**ãªã©ã§æ³šéããŸãã
ã³ãã³ãã©ã€ã³ãªãã·ã§ã³
-
-e 'script': å®è¡ããsedã¹ã¯ãªãããæå®ããŸããè€æ°ã®-eãªãã·ã§ã³ã䜿ããšãè€æ°ã®ã³ãã³ããé çªã«å®è¡ã§ããŸããã¹ã¯ãªããäžã«ç©ºçœãç¹æ®æåãããå Žåã¯ãåŒçšç¬Šã§å²ã¿ãŸãã -
-f script_file: å€éšãã¡ã€ã«ããsedã¹ã¯ãªãããèªã¿èŸŒã¿ãŸããè€éãªåŠçãè€æ°è¡ã«æž¡ãã³ãã³ãåãèšè¿°ãããã¡ã€ã«ãæå®ããŠå®è¡ã§ããŸãã -
-n: èªååºåæå¶ãªãã·ã§ã³ïŒquietã¢ãŒãïŒã§ããéåžžsedã¯åè¡åŠçåŸã«ãã¿ãŒã³ã¹ããŒã¹ïŒåŸè¿°ïŒãèªåçã«åºåããŸããããã®ãªãã·ã§ã³æå®æã¯èªååºåããŸããã代ããã«ãpã³ãã³ãïŒprintïŒãªã©ã䜿ã£ãŠæç€ºçã«åºåããè¡ã ãã衚瀺ããŸãã倧éã®ããã¹ãããç¹å®ã®è¡ã ããåãåºãããå Žåããéè€åºåãé¿ãããå Žåã«äŸ¿å©ã§ãã -
-i[SUFFIX]: ã€ã³ãã¬ãŒã¹ç·šéïŒçŽæ¥ç·šéïŒãè¡ããŸããNon-POSIXããæå®ãããã¡ã€ã«ãçŽæ¥æžãæãããããã³ãã³ãå®è¡åŸã«å€æŽå 容ãå ã®ãã¡ã€ã«ã«åæ ãããŸãããªãã·ã§ã³ã«æ¡åŒµåãæå®ãããšãç·šéåã®ããã¯ã¢ãããã¡ã€ã«ããã®æ¡åŒµåä»ãã§ä¿åããŸãã- äŸ:
-i.bakãšããã°å ãã¡ã€ã«ã*.bakãšããŠæ®ãã€ã€ç·šéãå®è¡ããŸããããã¯ã¢ããäžèŠã®å Žåã-iã«ç¶ããŠç©ºæååãæå®ããŸãïŒ-i''ãªã©ïŒã - å®è£
å·®: GNUç
sedã§ã¯-iãšããã¯ã¢ããæ¡åŒµåãçŽæ¥çµåããŠæå®å¯èœã§ãããGNUããLinuxããBSDç³»sedïŒäŸ: macOSä»å±ã®sedïŒã§ã¯-i ''ã®ããã«ç©ºçœãç©ºã®æ¡åŒµåãšããŠæç€ºæå®ããªããã°ããã¯ã¢ããç¡ãåäœã«ãªããªãç¹ã«æ³šæãBSDããmacOSããã€ãŸããmacOSã§sed -i 's/old/new/' fileã®ããã«æžããš-iã®åŒæ°ãç¡ããšè§£éãããšã©ãŒã«ãªããŸããããŒã¿ãã«ã«äœ¿ããªã-i.bakæ¹åŒã§ããã¯ã¢ããããŠãããšå®å šã§ãã
- äŸ:
-
-E/-r: æ¡åŒµæ£èŠè¡šçŸïŒERE: Extended Regular ExpressionïŒãå©çšããŸããNon-POSIXããPOSIXæšæºã®sedã¯åºæ¬æ£èŠè¡šçŸïŒBRE: Basic Regular ExpressionïŒã§ãã¿ãŒã³ãè§£éããŸããã-EïŒäžéšå®è£ ã§ã¯-rïŒãä»ãããšæ¡åŒµæ£èŠè¡šçŸã®æ§æã䜿çšã§ããŸããæ¡åŒµæ£èŠè¡šçŸã§ã¯+,?,|,()ãªã©ãããã¯ã¹ã©ãã·ã¥ç¡ãã§çŽæ¥äœ¿ãããããè€éãªãã¿ãŒã³ãæžãéã«ãšã¹ã±ãŒããæžã䟿å©ã§ãã- å®è£
å·®: BSDç³»
sedã§ã¯-Eã䜿çšããŸããBSDããmacOSããGNUçsedã§ã¯æŽå²ççµç·¯ãã-rãåçæ©èœãšããŠãããGNUããæè¿ã®GNUsedã§ã-Eãå©çšå¯èœã«ãªã£ãŠããŸããããŒã¿ãã«ãªã¹ã¯ãªãããæžãéã¯ãæ¡åŒµæ£èŠè¡šçŸã䜿ããã«BREã§æžãããç°å¢ã«å¿ããŠ-Eãš-rãåãæ¿ããå¿ èŠããããŸãã
- å®è£
å·®: BSDç³»
-
-u: ã¢ã³ãããã¡ã¢ãŒãã§åäœãããŸããNon-POSIXããGNUããéåžžãsedã¯äžå®éã®ããŒã¿ããŸãšããŠåŠçã»åºåããŸããã-uãä»ãããšå ¥åã1è¡åäœã§å³åº§ã«åŠçããåºåããããã¡ãªã³ã°ããããã«è¡ããŸãããªã¢ã«ã¿ã€ã æ§ãæ±ãããããã°åŠçãtail -fãšã®çµã¿åããã§é次åºåãããå Žåãªã©ã«æçšã§ãããã ãéåžžã¯ãããã¡ãªã³ã°ã«ããå¹çãäžãããããå¿ èŠãªå Žåã®ã¿äœ¿çšããŸãã -
-s: ãã¡ã€ã«åäœã§åé¢åŠçãè¡ããŸããNon-POSIXããGNUããè€æ°ãã¡ã€ã«ãåŒæ°ã«æå®ããå Žåãããã©ã«ãã§ã¯sedã¯ããããé£çµããäžã€ã®é£ç¶ããå ¥åïŒä»®æ³çã«äžã€ã®å€§ããªãã¡ã€ã«ïŒãšããŠåŠçããŸãã-sãæå®ãããšãåãã¡ã€ã«ãåå¥ã«åŠçãããã¡ã€ã«ãåãæ¿ããããšã«è¡çªå·ãæçµè¡$ã®å€å®ãªã©ããªã»ããããŸããåãã¡ã€ã«ãç¬ç«ããŠæ±ãããå Žåã«æå®ããŸãã -
-z: NULæååºåãã¢ãŒãã§åäœããŸããNon-POSIXããGNUããéåžžsedã¯æ¹è¡\nãåºåããšããŠã1è¡ãã€ãå ¥åãèªã¿ãŸããã-zãæå®ãããšå ¥åå šäœãNUL (\0)æåã§åºåãããæååãšããŠæ±ããŸããã€ãŸããæ¹è¡ãæ®éã®æåãšããŠãã¿ãŒã³ã¹ããŒã¹ã«åã蟌ã¿ã代ããã«NULãè¡åºåããšèŠãªãããŸãããã®ã¢ãŒãã§ã¯ãæ¹è¡ãå«ããã¿ãŒã³ããããç°¡åã«è¡ããããNULåºåãã§åºåããããŒã«ãšé£æºããŠåŠçãããã§ããŸãïŒäŸãã°find -print0ã§åºåããããã¡ã€ã«ãªã¹ãã®åŠçãªã©ïŒãNULã¯ããã¹ãããŒã¿ã§ã¯éåžžçŸããªãåºåããªã®ã§ãäºå®äžå ¥åå šäœãäžã€ã®å·šå€§å©çšããææ³ãšããŠã䜿ããŸãããã ãåºåæãNULåºåãã«ãªããããã³ã³ãœãŒã«ã«åºåããŠãèŠããªãç¹ã«æ³šæããŠãã ããã -
--regexp-extended:-Eãšåãæå³ã®ãã³ã°ãªãã·ã§ã³ã§ããGNUããä»ã«ã--quiet(ãŸãã¯--silent) ã¯-nã«çžåœã--in-placeã¯-iã«çžåœããŸãããGNUãçã§ã¯ãã®ãããªãã³ã°ãªãã·ã§ã³ãå©çšã§ããŸãïŒPOSIXäºæãéèŠããå Žåã¯ãã³ã°ãªãã·ã§ã³ã¯é¿ããŸãïŒã -
--help,--version: ããŒãžã§ã³æ å ±ããã«ãã¡ãã»ãŒãžã衚瀺ããŸãããGNUãçsedã«åãããªãã·ã§ã³ã§ãäœ¿çšæ³ã®ç°¡åãªäžèЧãããŒãžã§ã³ã確èªã§ããŸãã
sedã¹ã¯ãªããèšèªã®åºæ¬
sedã¯ã³ãã³ãã©ã€ã³ãªãã·ã§ã³ã§æå®ããç·šéæç€ºïŒã¹ã¯ãªããïŒã«åºã¥ããŠããã¹ããåŠçããŸããã¹ã¯ãªããã¯ãã¢ãã¬ã¹ïŒé©çšæ¡ä»¶ïŒ+ã³ãã³ãïŒæäœïŒãã®çµã¿åããã§æ§æãããç¹æ®ãªèšæ³ã«ãã£ãŠé«åºŠãªåŠçãèšè¿°ã§ããŸããããã§ã¯ãäž»ãªã¹ã¯ãªããæ§æèŠçŽ ã§ããã¢ãã¬ã¹æå®ãšã³ãã³ãã«ã€ããŠèª¬æããŸãã
ã¢ãã¬ã¹æå®ïŒé©çšç¯å²ã®æå®ïŒ
ã¢ãã¬ã¹ïŒaddressïŒãšã¯ãã©ã®è¡ã«å¯ŸããŠã³ãã³ããé©çšãããããæå®ãããã®ã§ããã¢ãã¬ã¹ã«ã¯ä»¥äžã®çš®é¡ããããŸãïŒ
-
ãªãïŒããã©ã«ãïŒ: ã¢ãã¬ã¹ãæå®ããªãã³ãã³ãã¯å šãŠã®è¡ã«é©çšãããŸãã
-
è¡çªå·ã«ããæå®: æ°åãæå®ãããšããã®è¡çªå·ãšäžèŽããè¡ã«é©çšããŸãïŒ1å§ãŸãã®è¡çªå·ã
1ã¯æåã®è¡ã2ã¯2è¡ç®âŠã$ã¯æçµè¡ã衚ããŸãïŒãäŸãã°ã5dã¯ã5è¡ç®ãåé€ãã$pã¯ãæçµè¡ã衚瀺ããšããæå³ã«ãªããŸãã -
æ£èŠè¡šçŸãã¿ãŒã³ã«ããæå®:
/æ£èŠè¡šçŸ/ã®åœ¢åŒã§ããã¿ãŒã³ã«ãããããè¡ã®å 容ã«å¯ŸããŠé©çšããŸããäŸãã°ã/error/pã¯ãããã¹ãäžã«"error"ãå«ãè¡ã衚瀺ãã§ããæ£èŠè¡šçŸã¯**åºæ¬æ£èŠè¡šçŸïŒBREïŒ**ã§è§£éãããŸãããã³ãã³ãã©ã€ã³ã§-Eãæå®ããã°æ¡åŒµæ£èŠè¡šçŸïŒEREïŒã䜿çšå¯èœã§ãã -
ç¯å²æå®ïŒ2ã¢ãã¬ã¹æå®ïŒ:
"éå§ã¢ãã¬ã¹,çµäºã¢ãã¬ã¹"ã®åœ¢åŒã§ãéå§ããçµäºãŸã§ã®é£ç¶ããç¯å²ã®è¡ã«å¯ŸããŠé©çšããŸããéå§ã¢ãã¬ã¹ã«ãããããè¡ãçŸãããšãã®è¡ããé©çšãéå§ããçµäºã¢ãã¬ã¹ã«ãããããè¡èªèº«ãå«ãã圢ã§ç¯å²ã®é©çšãçµäºããŸããç¯å²ã®éå§ãå床èŠã€ãããŸã§ãåãã³ãã³ãã¯é©çšãããŸãããäŸãã°ã/BEGIN/,/END/dã¯"BEGIN"ãšããè¡ãã"END"ãšããè¡ãŸã§ãã¹ãŠåé€ããŸãããã®å Žåãè€æ°ç®æã«BEGINãENDãããã¯ãããã°ãããããç¬ç«ããŠé©çšãããŸãã -
åŠå®ïŒå転ïŒ: ã¢ãã¬ã¹ã®åŸã«
!ãä»ããããšã§åŠå®ã衚ããŸããã€ãŸããæå®æ¡ä»¶ã«ãããããªãè¡ã«å¯ŸããŠã³ãã³ããé©çšããŸããäŸãã°ã/foo/!dã¯"foo"ãå«ãŸãªãè¡ãåé€ïŒçµæãšããŠ"foo"ãå«ãè¡ã ããæ®ãïŒãšããæå³ã«ãªããŸããè€æ°ã¢ãã¬ã¹ç¯å²ã«ã!ãçµã¿åããå¯èœã§ãïŒæå®ç¯å²å€ã®è¡ã«é©çšããªã©ïŒã
ãè£è¶³ã ã¢ãã¬ã¹ã«ãããæ£èŠè¡šçŸã¯åºåãæå/ã§å²ã¿ãŸãããä»»æã®æåãåºåãã«äœ¿ãããšãã§ããŸãïŒåŸè¿°ã®çœ®æã³ãã³ãsãšåæ§ã®ã«ãŒã«ã§ãïŒãäŸãã°ã#pattern#ã®ããã«/以å€ã§å²ãããšãå¯èœã§ããåºåãæåãå€ãããšãã¯ãäžè²«ããŠåãæåãéããŸã§äœ¿ããŸãã
äž»ãªã³ãã³ãäžèЧ
sedã¹ã¯ãªããã§äœ¿çšã§ããã³ãã³ãïŒæäœïŒã¯å€å²ã«ããããŸããããã§ã¯éèŠãªã³ãã³ããšãã®æ©èœã説æããŸããåã³ãã³ãã¯äžèšã®ã¢ãã¬ã¹æå®ãšçµã¿åãããŠã**ã[ã¢ãã¬ã¹]ã³ãã³ã å®è¡å
容ã**ãšãã圢åŒã§äœ¿ããŸãïŒã¢ãã¬ã¹çç¥æã¯å
šè¡å¯Ÿè±¡ïŒã
-
s/æ£èŠè¡šçŸ/眮ææåå/ãã©ã°: **眮æïŒsubstituteïŒ**ã³ãã³ãã§ãããã¿ãŒã³ã¹ããŒã¹ïŒçŸåšåŠçäžã®è¡ã®å 容ãåŸè¿°ïŒã«å¯Ÿããæå®ããæ£èŠè¡šçŸã«ãããããéšåã眮ææååã«çœ®ãæããŸãããã©ã°ã«ãã£ãŠåäœãå¶åŸ¡ã§ããŸãã-
åºæ¬åäœ: æåã«ãããããç®æ1ã«æã ãã眮æããŸãããããããªããã°äœãããŸããã
-
ãã©ã°:
g(global): è¡å ã®ãããç®æããã¹ãŠçœ®æããŸãïŒã°ããŒãã«çœ®æïŒããã©ã°ãä»ããªãå Žåãåè¡ã«ã€ãæåã®1ç®æã®ã¿çœ®æããŸãã- æ°å (äŸ:
2): æå®ããåºçŸé ã®ç®æã眮æããŸãïŒ1è¡äžã®nçªç®ã®ãããã眮æïŒãäŸãã°2ãªãåè¡ã§2çªç®ã«èŠã€ãã£ããããã ãã眮æããŸããgãpãšã¯äœµçšã§ããŸããã p: 眮æãè¡ãããè¡ã衚瀺ããŸãã-nãªãã·ã§ã³ãšçµã¿åãããŠã眮æãèµ·ããè¡ã ãåºåããçšéã«äœ¿ããŸãïŒçœ®æãèµ·ããªãã£ãè¡ã¯åºåãããŸããïŒãw file: 眮æãè¡ãããè¡ãæå®ãã¡ã€ã«ã«æžãåºããŸãïŒè¿œå æžã蟌ã¿ïŒãäŸãã°sed 's/error/ERROR/w errors.txt' log.txtãšãããšãlog.txtå ã§"error"ã"ERROR"ã«çœ®æãããè¡ãæ°ãã«errors.txtãã¡ã€ã«ã«åºåãããŸãã
ãæ³šæãwãã©ã°ã¯è¿œèšã¢ãŒãã§æžã蟌ããããæ¢åãã¡ã€ã«ãããå Žåã¯å 容ã远èšãããŸããååãã¡ã€ã«ã®å å®¹ãæ¯åãªã»ãããããå ŽåãäžåºŠåé€ããã>ãªãã€ã¬ã¯ãã§äžæžãããå¿ èŠããããŸããI/i: æ£èŠè¡šçŸã®ãããã倧æåã»å°æåãåºå¥ããã«è¡ããŸããNon-POSIXããGNUããIïŒãããã¯å°æåiïŒãæå®ãããšãæ£èŠè¡šçŸãã¿ãŒã³ã倧æåå°æåãåºå¥ãããããããŸãïŒäŸ:s/abc/XYZ/Iã¯"ABC"ã"Abc"ã眮æå¯Ÿè±¡ïŒããã®ãã©ã°ã¯GNUsedãäžéšã®BSDç³»sedã§ãµããŒããããŠããŸãïŒmacOSã§ã¯Big Sur以é察å¿ãBSDããmacOSãïŒãããŒã¿ãã«ã§ãªãç¹ã«æ³šæããŠãã ããã- ``ïŒãªãïŒ: ãã©ã°ãäœãä»ããªããã°æåã®1ç®æã®ã¿çœ®æããè¡ã¯èªååºåãããŸãïŒ
-næå®æã¯åºåãããŸããïŒã
-
眮ææååå ã®ç¹æ®ã·ãŒã±ã³ã¹:
&: ãããããæååå šäœãåå©çšããŸããäŸãã°sed 's/foo/[&]/'ãšãããš"foo"ã"[foo]"ã«çœ®æã§ããŸãã\1ã\9: æ£èŠè¡šçŸãã¿ãŒã³å ã§**äžžæ¬åŒ§()**ã䜿ã£ãŠãã£ããã£ïŒææïŒããã°ã«ãŒãã«å¯Ÿå¿ããŸãã\1ã¯1çªç®ã®ã°ã«ãŒãã\2ã¯2çªç®ã...ãšãªããŸããäŸãã°sed -E 's/(Hello) (World)/\2 \1/'ã¯"Hello World"ã"World Hello"ã«äžŠã³æ¿ããŸãã- ãšã¹ã±ãŒã: 眮ææååäžã§ããã¯ã¹ã©ãã·ã¥
\ã䜿ããšç¹æ®æå³ãæã€&ã\1çããªãã©ã«ãšããŠæ±ãããšãã§ããŸããäŸãã°\&ã¯æå"&"ã«ã\nã¯æ¹è¡ã«çœ®ãæãããŸãïŒ\nã¯çœ®ææååã§ã¯æ¹è¡ãæå³ããŸãããã ãæ£èŠè¡šçŸãã¿ãŒã³ã§ã¯ç¹å¥ãªæå³ãæããªãã®ã§æ³šæããŠãã ããïŒã
-
æ£èŠè¡šçŸã®åºåã:
s///ã®åºåãæå/ãä»»æã®æåã«å€æŽå¯èœã§ãããã¿ãŒã³ã眮ææååã«/ãå«ãŸããå Žåãä»ã®èšå·ïŒ@,#ãªã©ïŒãçšãããšãšã¹ã±ãŒããæžãããŸããäŸ:s#path/to#new/path#ã
-
-
d: **åé€ïŒdeleteïŒ**ã³ãã³ãã§ããçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ïŒè¡ïŒãåé€ããå³åº§ã«æ¬¡ã®è¡ã®åŠçã«é²ã¿ãŸããäŸãã°/^\s*$/dã¯ã空çœããå«ãŸãªãè¡ïŒç©ºè¡ïŒãåé€ããšãªãããã®è¡ã¯åºåãããŸãããdã䜿ããšè©²åœè¡ã§ä»¥éã®ã³ãã³ãã¯ã¹ããããããæ°ããªè¡ã«åŠçãç§»ãç¹ã«æ³šæããŠãã ããã -
p: 衚瀺ïŒprintïŒã³ãã³ãã§ããçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ã®å å®¹ãæšæºåºåã«è¡šç€ºããŸãã-nãªãã·ã§ã³ãšçµã¿åããã衚瀺ãããè¡ã ããåºåããçšéã§äœ¿ãããŸããäŸãã°sed -n '/ERROR/p' log.txtã¯ãã°ãã"ERROR"ãå«ãè¡ã®ã¿è¡šç€ºããŸãã-nãä»ããªãå Žåãpã䜿ãè¡ã¯äºéã«åºåãããããšãããããæ³šæããŠãã ããïŒèªååºå +pã«ããåºåïŒã -
a\ ããã¹ã: 远èšïŒappendïŒã³ãã³ãã§ããæå®ããããã¹ããçŸåšã®è¡ã®çŽåŸã«æ¿å ¥ããŸããa\ã®åŸã«æ¹è¡ãå ¥ããŠãç¶ãè¡ã«è¿œå ããããã¹ããæžããŸããäŸãã°/pattern/a\远å ããè¡ã¯ããã¿ãŒã³ã«ãããããè¡ã®æ¬¡ã«"远å ããè¡"ãå·®ã蟌ã¿ãŸããè€æ°è¡è¿œå ãããå Žåã\ã§è¡æ«ãåºåããªããããã¹ããæ¹è¡ããŠèšè¿°ããŸããa\ã³ãã³ãèªäœã¯æ¹è¡ãå«ããããã·ã§ã«ã¯ã³ã©ã€ããŒã§ã¯æžãã¥ãããã¹ã¯ãªãããã¡ã€ã«å ã§äœ¿ãã»ãã簡䟿ãªå ŽåããããŸãã -
i\ ããã¹ã: æ¿å ¥ïŒinsertïŒã³ãã³ãã§ããæå®ããããã¹ããçŸåšã®è¡ã®çŽåã«æ¿å ¥ããŸãïŒå¯Ÿè±¡è¡èªäœã¯åŸãã«ããã圢ã«ãªããŸãïŒãæžåŒã¯a\ãšåæ§ã§ãi\ã®åŸã«æ¹è¡ïŒæ¿å ¥ããããã¹ããèšè¿°ããŸããäŸãã°1i\ å é ã«æ¿å ¥ã¯ãã¡ã€ã«ã®å é è¡ã®åã«ãå é ã«æ¿å ¥ããšããè¡ã远å ããŸãã -
c\ ããã¹ã: 眮æïŒchangeïŒã³ãã³ãã§ããæå®ç¯å²ã®è¡å šäœãå¥ã®ããã¹ãã§çœ®ãæããŸããa\ãi\ãšåæ§ã«åŒæ°ãšããŠããã¹ããèšè¿°ããŸããã¢ãã¬ã¹ã§åäžè¡ãæå®ããã°ãã®è¡ããç¯å²æå®ããã°ãã®ç¯å²ã®å šè¡ããŸãšããŠæå®ããã¹ã1è¡ïŒè€æ°è¡æå®å¯èœïŒã«å·®ãæ¿ããŸããäŸãã°5,7c\ ***ãšãããš5ã7è¡ç®ãå šãŠåé€ããŠ"***"ãšããäžè¡ã«å€æŽããŸãã -
y/æåå1/æåå2/: æå転æïŒtransliterateïŒã³ãã³ãã§ããtrã³ãã³ãã«äŒŒãåããããæåå1ã«å«ãŸããåæåã察å¿ããæåå2ã®äœçœ®ã®æåã«çœ®æããŸããæ£èŠè¡šçŸã§ã¯ãªãçã®æåã1察1ã§å€æããç¹ãšãgãã©ã°äžèŠã§è¡å šäœã«é©çšãããç¹ãç¹åŸŽã§ãïŒéšåäžèŽã§ã¯ãªãæååäœã§å šãŠçœ®ãæãïŒãäŸãã°y/abc/ABC/ã¯å°æåa,b,cããããã倧æåA,B,Cã«å€æããŸããæåå1ãšæåå2ã®é·ããç°ãªãå Žåãçãã»ãã«åãããŠäžè¶³åã¯ç¡èŠãããŸããyã³ãã³ãã¯ã¢ãã¬ã¹æå®ãšçµã¿åãããŠå¿ èŠãªè¡ã ãã«é©çšããããšãå¯èœã§ãã -
n: 次è¡èªã¿èŸŒã¿ïŒnextïŒã³ãã³ãã§ããçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ã®åŠçãçµäºããå³åº§ã«æ¬¡ã®å ¥åè¡ãèªã¿èŸŒãã§åŠçãç¶ç¶ããŸããããã©ã«ãåäœïŒ-nãªãïŒã®å Žåãnã³ãã³ãã¯çŸåšã®è¡ãåºåããŠããæ¬¡ã®è¡ãžé²ã¿ãŸãã-nãªãã·ã§ã³æå®æã¯åºåãããã æ¬¡è¡ãžé²ã¿ãŸããé£ç¶ããè¡ãã¹ãããããããåŠçãæ©æã«æ¬¡è¡ã«ç§»ãéã«çšããŸãã -
N: 次è¡è¿œå ïŒappend NextïŒã³ãã³ãã§ããæ¬¡ã®å ¥åè¡ãçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ã«è¿œå ïŒçµåïŒããŸããçµæããã¿ãŒã³ã¹ããŒã¹ã«ã¯è€æ°è¡ãå«ãããšã«ãªããŸãïŒå ã®å 容 + æ¹è¡ + 次ã®è¡ïŒãNã䜿ããš1åã®ã³ãã³ããµã€ã¯ã«ã§2è¡ä»¥äžãåæã«åŠçå¯èœã§ããäŸãã°ãããè¡ãšãã®çŽåŸã®è¡ãçµã¿åãããŠçœ®æã»åé€ãããã2è¡ã1è¡ã«ãŸãšããããšãã£ãæäœãã§ããŸããNãçšããåŸããã¿ãŒã³ã¹ããŒã¹å ã«ã§ããæ¹è¡ã¯æ£èŠè¡šçŸã§ã¯\nã§ãããå¯èœã§ãããªããNå®è¡åŸã¯æ¬¡ã®è¡ã¯æ¢ã«èªã¿èŸŒã¿æžã¿ãªã®ã§ããã®è¡ã¯éåžžã®ãµã€ã¯ã«ã§ã¯èªã¿é£ã°ãããŸãã -
P: éšå衚瀺ïŒprint First partïŒã³ãã³ãã§ãããã¿ãŒã³ã¹ããŒã¹å ã«è€æ°è¡ãå«ãã§ããå Žåã«ããã®å é ã®è¡ïŒæåã®æ¹è¡ããåã®éšåïŒã ãã衚瀺ããŸããäŸãã°Nã§2è¡ãçµåããåŸã«Pãå®è¡ãããšãçµåãããæåã®è¡ã®ã¿ãåºåã§ããŸãã-nãªãã·ã§ã³ãšçµã¿åãããŠéšåçãªåºåå¶åŸ¡ã«äœ¿ãé«åºŠãªã³ãã³ãã§ããPå®è¡åŸããã¿ãŒã³ã¹ããŒã¹ã®å 容ã¯ç¶æãããŸãã -
D: éšååé€ïŒdelete First partïŒã³ãã³ãã§ãããã¿ãŒã³ã¹ããŒã¹å ã«æ¹è¡ãå«ãŸããå Žåããã®å é ã®è¡ïŒæ¹è¡ãŸã§ïŒãåé€ããæ®ãã®å å®¹ïŒæ¹è¡ä»¥éã®éšåïŒããã¿ãŒã³ã¹ããŒã¹ãšããŠå³åº§ã«æ¬¡ã®ãµã€ã¯ã«ã«ç§»è¡ããŸãããã¿ãŒã³ã¹ããŒã¹ã«ãŸã æ¹è¡ãæ®ã£ãŠããéããæ°ãã«å ¥åè¡ãèªãŸãã«æ¬¡ãµã€ã¯ã«ãç¹°ãè¿ãããŸããäŸãã°ã2è¡ãçµåããç¶æ ã§Dã䜿ããšãå é è¡ãåãé€ãããæ®ã£ã2è¡ç®ã次ãµã€ã¯ã«ã§åŠçãããŸãïŒã«ãŒãåŠçã«å¿çšãããŸãïŒã -
h: **ããŒã«ãïŒholdïŒã³ãã³ãã§ããçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ã®å 容ãä¿æé åïŒããŒã«ãã¹ããŒã¹ïŒ**ã«ã³ããŒããŸãã以åã®ããŒã«ãå 容ã¯äžæžããããŸãããã®ã³ãã³ãã«ãããããè¡ã®å 容ãåŸã§åç §ããããå¥ã®å Žæã«åã£ãŠããããšãå¯èœã§ãã -
H: 远å ããŒã«ãïŒappend holdïŒã³ãã³ãã§ããçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ã®å 容ãããŒã«ãã¹ããŒã¹ã«è¿œå ããŸããããŒã«ãã¹ããŒã¹ã®æ¢åå å®¹ã®æ«å°Ÿã«æ¹è¡ãšãšãã«è¿œèšãããŸããè€æ°è¡ã®èç©ã«äœ¿ããŸãã -
g: ãã¿ãŒã³ååŸïŒgetïŒã³ãã³ãã§ããããŒã«ãã¹ããŒã¹ã®å 容ã§ãã¿ãŒã³ã¹ããŒã¹ã眮ãæããŸãïŒååŸããŠããã€ã¡ãŒãžïŒãå ã®ãã¿ãŒã³ã¹ããŒã¹ã®å 容ã¯ç Žæ£ãããããŒã«ãã®ã³ããŒã§äžæžããããŸãã -
G: 远å ååŸïŒappend getïŒã³ãã³ãã§ããããŒã«ãã¹ããŒã¹ã®å 容ããã¿ãŒã³ã¹ããŒã¹ã«è¿œå ããŸããçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ã®æ«å°Ÿã«æ¹è¡ãšããŒã«ãå 容ãä»å ãããŸãã -
x: 亀æïŒexchangeïŒã³ãã³ãã§ãããã¿ãŒã³ã¹ããŒã¹ãšããŒã«ãã¹ããŒã¹ã®å 容ã亀æããŸãããã¿ãŒã³ã¹ããŒã¹ã®å 容ã¯ããŒã«ãã¹ããŒã¹ãžè¡ããããŒã«ãã¹ããŒã¹ã®å 容ããã¿ãŒã³ã¹ããŒã¹ã«æ¥ãŸãããã®æäœã«ãããè¡ããšã«ä¿æããå 容ãšçŸåšã®å 容ãå ¥ãæ¿ããŠåŠçããããšãã£ãããªãã¯ãå¯èœã§ãã -
:ã©ãã«å: ã©ãã«ïŒlabelïŒãèšå®ããŸããã¹ã¯ãªããå ã®ãžã£ã³ãå ã®ç®å°ãšããŠæ©èœããŸãããã®è¡èªäœã¯äœãããŸããããåŸè¿°ã®bãtã³ãã³ãã§æå®äœçœ®ã«ç§»åããããã®ã¿ã°ãšããŠäœ¿ããŸããã©ãã«åã¯è±æ°åãããªãªããªã©ã§æ§æã§ããŸãã -
b [ã©ãã«]: åå²ïŒbranchïŒã³ãã³ãã§ããæå®ããã©ãã«äœçœ®ã«ç¡æ¡ä»¶ã§ãžã£ã³ãããŸããã©ãã«ãçç¥ãããšã¹ã¯ãªããã®æ«å°ŸïŒæ¬¡ã®ãµã€ã¯ã«ïŒãžãžã£ã³ãããŸããç¡éã«ãŒãã«æ³šæãã€ã€ãã¹ã¯ãªããå ã§åŠçãç¹°ãè¿ãããå Žåã«äœ¿ãããŸãã -
t [ã©ãã«]: ãã¹ãïŒtestïŒã³ãã³ãã§ããçŽåã®çœ®æã³ãã³ãïŒsïŒã®æåŠãå€å®ããçŽåã®sedã³ãã³ãã«ãã眮æãå®è¡ãããå Žåã«æå®ã©ãã«ã«ãžã£ã³ãããŸããçŽåã®ã³ãã³ããsã§çœ®æãèµ·ããªããã°ãžã£ã³ããããæ¬¡ã®ã³ãã³ãã«é²ã¿ãŸããããã«ãããããæååã眮æã§ããéãç¹°ãè¿ãããšãã£ãåŠçãå¯èœã§ããã©ãã«çç¥æã¯ã¹ã¯ãªããæ«å°Ÿã«ãžã£ã³ãããŸãã- äŸ:
äžèšã¯äžè¡ã®äžã§:loop s/foobar/foo bar/ t loop"foobar"ã眮æãããªããªããŸã§ç¹°ãè¿ããŸãïŒâ»å®éã¯gãã©ã°ã§äžåºŠã«å šçœ®æã§ããããããã®äŸã¯æŠå¿µèª¬æã§ãïŒã
泚: äžã€åã§ã¯ãªãçŽåã®sedã³ãã³ããåºæºã«å€æããç¹ã«æ³šæããŸããããéäžã«å¥ã®ã³ãã³ãïŒåé€dãªã©ïŒãæãŸããšãtã®å€å®å¯Ÿè±¡ãšãªããçŽåã®ã³ãã³ããã¯å€ãããŸãã
- äŸ:
-
T [ã©ãã«]: åŠå®ãã¹ãã³ãã³ãã§ããNon-POSIXããGNUããåäœã¯tã®éã§ãçŽåã®çœ®æã§çœ®æãè¡ãããªãã£ãå Žåã«ãžã£ã³ãããŸããGNUããå€ãsedã«ã¯ç¡ããGNUçãªã©ã§è¿œå ãããæ¡åŒµã§ãã -
q [çµäºã³ãŒã]: çµäºïŒquitïŒã³ãã³ãã§ããçŸåšã®åŠçãçµäºãã以éã®å ¥åã¯èªã¿é£ã°ãããŸããéåžžã¯çŸåšã®ãã¿ãŒã³ã¹ããŒã¹ãå³åº§ã«åºåããŠçµäºããŸãïŒ-næå®æã¯åºåããçµäºïŒãæ°å€ãæå®ãããšçµäºã³ãŒããšããŠè¿ããŸãïŒçç¥æã¯0ïŒãäŸãã°/ERROR/q 1ã¯ãå ¥åäžã«"ERROR"ãèŠã€ãã£ãæç¹ã§çµäºãçµäºã³ãŒã1ãè¿ãããšããäœ¿ãæ¹ãã§ããŸããqã¯å¹çã®ããããããåŸäžèŠãªåŠçãã¹ãããããããç¹å®æ¡ä»¶ã§æ©ãçµäºãããå Žåã«äœ¿ããŸãã -
Q [çµäºã³ãŒã]: 匷å¶çµäºïŒQuit without printïŒã³ãã³ãã§ããNon-POSIXããGNUããGNUçsedã§è¿œå ããããã®ã§ãqãšéãçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ãåºåããã«å³çµäºããŸããGNUãã-næå®ã®æç¡ã«é¢ãããäœãåºããã«çµäºã§ããã®ã§ãç¹å®æ¡ä»¶ã§éšåçãªåºåã ãè¡ãçµäºãããå Žåãªã©ã«å©çšå¯èœã§ãã -
r ãã¡ã€ã«å: èªèŸŒïŒreadïŒã³ãã³ãã§ããæå®ãããã¡ã€ã«ã®å 容ãçŸåšã®è¡ã®çŽåŸã«æ¿å ¥ããŸããäŸãã°5r data.txtã¯ã5è¡ç®ã®åŸã«data.txtã®äžèº«ãæ¿å ¥ããŸããè€æ°è¡ã®ããã¹ããå·®ã蟌ã¿ããå Žåãªã©ã«äŸ¿å©ã§ãããã¡ã€ã«åã¯ååšããå¿ èŠããããèªã¿èŸŒããªããã°ãšã©ãŒãšãªããŸãã -
w ãã¡ã€ã«å: æžåºïŒwriteïŒã³ãã³ãã§ããçŸåšã®ãã¿ãŒã³ã¹ããŒã¹ã®å 容ãæå®ãããã¡ã€ã«ã«æžãåºããŸããäŸãã°/warning/w warnings.logã¯"warning"ãå«ãè¡ãwarnings.logã«åºåããŸãããã®ã³ãã³ãã¯åºåå ãã¡ã€ã«ãäžæžãã§ã¯ãªã远èšã¢ãŒãã§éããŸãããã¡ã€ã«ãç¡ãå Žåã¯æ°èŠäœæããŸããwã³ãã³ãèªäœã¯æšæºåºåãžã®åœ±é¿ã¯ç¡ãããã¡ã€ã«æžãåºãã®ã¿è¡ãåŠçã¯ç¶ç¶ããŸãã -
=: è¡çªå·åºåã³ãã³ãã§ããçŸåšã®è¡çªå·ã衚瀺ããŸãïŒåŸã«æ¹è¡ãä»å ãããŸãïŒããã®ã³ãã³ãã䜿ããšãããã¹ãã®è¡çªå·ãåºåãããããããã°æã«ãä»äœè¡ç®ãåŠçããŠããããã確èªã§ããŸããäŸãã°ãsed -n '5,7{=;p;}' fileãšãããš5ã7è¡ç®ã«ã€ããŠãè¡çªå·âå 容ãã®é ã§è¡šç€ºããŸãã=ã³ãã³ãã¯ããèªäœã§åºåã䌎ãç¹ã«çæããŠãã ããã
ããã¿ãŒã³ã¹ããŒã¹ãšããŒã«ãã¹ããŒã¹ã
äžèšã§ãã¿ãŒã³ã¹ããŒã¹ãããŒã«ãã¹ããŒã¹ãšããçšèªãç»å ŽããŸãããç°¡åã«èª¬æãããšãsedã«ã¯å
¥åããã¹ããä¿æãã2ã€ã®é åããããŸãïŒ
-
ãã¿ãŒã³ã¹ããŒã¹: çŸåšåŠçããŠããè¡ïŒãããã¯çµåãããè€æ°è¡ïŒã®å å®¹ãæ ŒçŽãããŸãã
sedã¹ã¯ãªããã®ã³ãã³ãã¯åºæ¬çã«ãã®ãã¿ãŒã³ã¹ããŒã¹å ã®ããã¹ãã«å¯ŸããŠé©çšãããŸããåã³ãã³ããµã€ã¯ã«ã®çµããã«ãïŒ-nã§æå¶ããŠããªããã°ïŒãã¿ãŒã³ã¹ããŒã¹ã®å 容ãåºåãããæ¬¡ã®è¡ãæ°ãã«èªã¿èŸŒãŸããŠãã¿ãŒã³ã¹ããŒã¹ã眮ãæããŸãã -
ããŒã«ãã¹ããŒã¹: äžæçã«ããŒã¿ãä¿åã§ããäœæ¥çšã®é åã§ããããã©ã«ãã§ã¯ç©ºïŒäœãä¿æããªãïŒç¶æ ã§éå§ããŸãã
hãHã³ãã³ãã§ãã¿ãŒã³ã¹ããŒã¹ã®å 容ãã³ããŒã»è¿œèšã§ããgãGã§ããŒã«ãã®å 容ãåãåºããŠãã¿ãŒã³ã¹ããŒã¹ã«æ»ããŸããè€æ°è¡ã®çµã¿åããããé¢ããå Žæã®ããã¹ããå©çšããããšãã«äœ¿ããŸããããŒã«ãã¹ããŒã¹ã®å å®¹ã¯æ°ããå ¥åè¡ãèªãã§ãä¿æããç¶ããå¿ èŠãªå Žé¢ã§åãåºããŠå©çšã§ããŸãã
ãããã®é åãæŽ»çšããããšã§ãsedã¯1è¡ä»¥äžã®ããã¹ããæè»ã«æäœããŸããä»ã®ã³ãã³ããšçµã¿åããããšãã«ãŒãåŠçãååŸã®è¡ã«åºã¥ãç·šéãšãã£ãè€éãªæäœãå¯èœã§ãã
䜿çšäŸïŒåºæ¬ããé«åºŠãžïŒ
ããã§ã¯ãäžèšã§èª¬æããåçš®ãªãã·ã§ã³ãæ©èœãå®éã«äœ¿ã£ãå ·äœäŸã瀺ããŸããåºæ¬çãªãã®ããå¿çšçãªãã¯ããã¯ãŸã§é ã«ç޹ä»ããåäŸã§ã®æåŸ ãããåºåãæåã«ã€ããŠã説æããŸãã
1. åçŽãªæåå眮æ
ç®ç: ããã¹ãå ã®ç¹å®ã®æååãå¥ã®æååã«çœ®ãæããã
$ echo "I like apples." | sed 's/apples/oranges/'
I like oranges.
-
ã³ãã³ã解説:
s/apples/oranges/ã¯ãã"apples"ã«ãããããéšåã"oranges"ã«çœ®æããšããæå³ã§ãã -
ãã®äŸã§ã¯å ¥åãI like apples.ãã®"apples"ã"oranges"ã«çœ®æãããåºåã«åæ ãããŠããŸãã
-
ãã©ã°æå®ãç¡ããããåè¡ã§æåã®äžèŽã®ã¿ã眮æããŸãïŒãã®å Žå"apples"ã¯äžåºŠã ãåºçŸããã®ã§åé¡ãããŸããïŒã
ããäžã€ã®äŸ: å ¥åäžã®è€æ°ã®ç®æã眮æããŠã¿ãŸãããã
$ echo "apple apple pie" | sed 's/apple/banana/'
banana apple pie
- ããã§ã¯å ¥åã«"apple"ã2ç®æãããŸããããã©ã°ãä»ããªãå Žåæåã®"apple"ã ãã"banana"ã«çœ®æããã2ã€ç®ã®"apple"ã¯ãã®ãŸãŸã§ãã
ã°ããŒãã«çœ®æ: gãã©ã°ã䜿ã£ãŠå
šãŠã®åºçŸç®æã眮æããŸãã
$ echo "apple apple pie" | sed 's/apple/banana/g'
banana banana pie
gãã©ã°ã«ãããè¡å ã®**å šãŠã®"apple"`**ã"banana"ã«çœ®æãããŸããã
ç¹å®ã®åºçŸç®æã®ã¿çœ®æ: äŸãã°åè¡ã§2çªç®ã«åºãŠãã"foo"ã ãã眮æããå Žåãæ°åãã©ã°ã䜿çšããŸãã
$ echo "foo foo foo" | sed 's/foo/FOO/2'
foo FOO foo
- ãã©ã°ã«
2ãæå®ããããšã§ã2çªç®ã«åºçŸãã"foo"ã®ã¿ã"FOO"ã«çœ®æãããŸããïŒ1çªç®ãš3çªç®ã¯æªå€æŽïŒã
éšåäžèŽã®åå©çš: ãããããæååå
šäœãã°ã«ãŒããåå©çšããäŸã§ãã&ãš\1ãªã©ã掻çšããŸãã
$ echo "error" | sed 's/.*/[&]/'
[error]
- æ£èŠè¡šçŸ
. *ã¯è¡å šäœïŒä»»æã®æå0æå以äžãæå€§ãããïŒã衚ãã®ã§ãããã[&]ã«çœ®æããŠããŸãã&ã¯ãããå šäœïŒããã§ã¯"error"ïŒã«å±éããããããçµæã¯[error]ã«ãªããŸããæååå šäœãè§æ¬åŒ§ã§å²ãåŠçãsedã ãã§å®çŸã§ããŸããã
$ echo "123-456" | sed -E 's/([0-9]+)-([0-9]+)/\2-\1/'
456-123
-Eãªãã·ã§ã³ãä»ããæ¡åŒµæ£èŠè¡šçŸã§æ°åã®äžŠã³ããã£ããã£ããŠããŸãã([0-9]+)-([0-9]+)ã¯ãã€ãã³ã§åºåãããæ°ååã2ã€ææãããã¿ãŒã³ã§ãã眮ææåå\2-\1ã¯ã2ã€ç®ã®ã°ã«ãŒãããã€ãã³ã1ã€ç®ã®ã°ã«ãŒããã®é ã«åé 眮ãããšããæå³ãªã®ã§ã123-456ã456-123ã«äžŠã³æ¿ããããŸãããã®ããã«\1ã\2ã§éšåããããåå©çšã§ããŸãã
ã±ãŒã¹ãç¡èŠãã眮æ: Iãã©ã°ïŒGNUæ¡åŒµïŒã§å€§æåå°æåãåºå¥ãã眮æããŸãã
$ echo "Hello hello HELLO" | sed 's/hello/hi/I'
hi hi hi
Iãã©ã°ã«ãã£ãŠã"Hello"ã"HELLO"ãšãã£ã倧å°ã®å·®ç°ãç¡èŠããŠæ€çŽ¢ãããã¹ãŠ"hi"ã«çœ®æããŠããŸããGNUããïŒPOSIXç°å¢ã§ã¯ãµããŒããããªãããæ³šæãïŒ
泚æ: äžèšã®äŸã§ã¯åçŽåã®ããäžã€ã®echoã«äžã€ã®sedãé©çšããŠããŸãããå®éã«ã¯è€æ°è¡ãããªããã¡ã€ã«ã«å¯ŸããŠãåæ§ã«åäœããŸãããŸãsedã®çœ®æã¯åºæ¬æ£èŠè¡šçŸãªã®ã§ãããªãªããã¢ã¹ã¿ãªã¹ã¯ãªã©æ£èŠè¡šçŸã®ã¡ã¿æåã¯å¿
èŠã«å¿ããŠãšã¹ã±ãŒãããŸãããïŒäŸãã°ããã.ã¯ä»»æã®äžæåãæå³ããã®ã§ããªãã©ã«ã®ããããæ¢ãã«ã¯\.ãšæžããŸãïŒã
2. æœåºãšåºåå¶åŸ¡ (pã³ãã³ããš-n)
ç®ç: ãã°ãªã©ããç¹å®ã®è¡ã ããæãåºãããŸãã¯æ¡ä»¶ã«åèŽããè¡ã®ã¿è¡šç€ºããã
- äŸ: ãã¿ãŒã³ã«äžèŽããè¡ã衚瀺 â
-nãªãã·ã§ã³ãšpã³ãã³ãã®çµã¿åããã
$ printf "error: bad\nok: good\nerror: failed\n" | sed -n '/^error/p'
error: bad
error: failed
<small>ïŒâ»printfã§è€æ°è¡ã®æååãçšæããŠããŸãïŒ</small>
-
-nã«ããèªååºåãæå¶ãã/^error/pãšããã¹ã¯ãªããã§"error"ã§å§ãŸãè¡ã ãã衚瀺ããŠããŸãã -
æ£èŠè¡šçŸ
^errorã¯è¡é ã«"error"ãå«ãè¡ãæå³ããŸããå®è¡çµæã§ã¯ã"error:"ã§å§ãŸãè¡ã®ã¿ãåºåãããŠããŸãïŒ"ok:"ã§å§ãŸãè¡ã¯ç¡èŠïŒã -
äŸ: ç¹å®è¡çªå·ã®è¡šç€º â äŸãã°ãã¡ã€ã«ã®10ã12è¡ç®ã ããæãåºãããå Žåã
$ seq 1 15 | sed -n '10,12p'
10
11
12
-
ããã§ã¯
seq 1 15ã§1ãã15ãŸã§ã®æ°åãåè¡ã«åºåãããã®åºåãsedã«æž¡ããŠããŸãã -
'10,12p'ã¯ç¯å²ã¢ãã¬ã¹æå®ã§10è¡ç®ãã12è¡ç®ã«ãããããè¡ã«å¯ŸããŠpïŒè¡šç€ºïŒãå®è¡ããããšããæå³ã§ãã -
-nãä»ããŠããã®ã§æå®ç¯å²å€ã®è¡ã¯è¡šç€ºãããã10ã12ã ãã衚瀺ãããŸãã
èªååºåãšã®é¢ä¿: -nãä»ããªãå Žåãpã³ãã³ãã¯éè€åºåãæãããšããããŸãã
$ echo "foo" | sed '/foo/p'
foo
foo
-
ãã®äŸã§ã¯
-nãªãã·ã§ã³ç¡ãã§/foo/pã䜿ããŸãããsedã¯éåžžå šè¡ãåºåããã®ã§"foo"ã1ååºåãããããã«pã³ãã³ãã«ãã£ãŠãã1ååºåãããçµæã2éã«è¡šç€ºãããŠããŸãã -
解決çãšããŠã
pã䜿ãå Žåã¯-nãªãã·ã§ã³ãä»ããŠå¿ èŠãªè¡ã ãåºåããããã«ãããããããã¯pã³ãã³ãã䜿ããã«dïŒåé€ïŒã§äžèŠãªè¡ãæ¶ãã¢ãããŒãã«ãããªã©ã®æ¹æ³ããããŸãã
è€æ°æ¡ä»¶ã®æœåº: äŸãã°ããšã©ãŒè¡ãšèŠåè¡ã ã衚瀺ããããå Žåãè€æ°ã®ã¢ãã¬ã¹ã䜿ããŸãã
$ printf "ERROR: bad\nINFO: fine\nWARNING: check\n" | sed -n -e '/ERROR/p' -e '/WARNING/p'
ERROR: bad
WARNING: check
-
-eãªãã·ã§ã³ã§2ã€ã®ã¹ã¯ãªãã/ERROR/pãš/WARNING/pãé ã«æå®ããŠããŸãã-nã§èªååºåãæ¢ããERRORè¡ãšWARNINGè¡ã®ã¿æç€ºçã«åºåãã圢ã§ãã -
ãªãããã®å Žåã¯1ã€ã®æ£èŠè¡šçŸã§
/(ERROR|WARNING)/pãšãŸãšããããšãã§ããŸãïŒæ¡åŒµæ£èŠè¡šçŸã®å Žåã¯-Eãä»ããBREã§æžãå Žåã¯/ERROR\|WARNING/ãšèšè¿°ãGNUãïŒã
3. è€æ°ã³ãã³ãã®é£ç¶é©çš
ç®ç: äžåºŠã®sedåŒã³åºãã§è€æ°ã®ç·šéãé çªã«å®è¡ããã
-eãªãã·ã§ã³ã«ãã倿®µåŠç: ãã¡ã€ã«å ã®ããã¹ããé ã«å€æããŸãã
$ echo "Hello, John Doe" | sed -e 's/John/Jane/' -e 's/Hello/Hi/'
Hi, Jane Doe
-
ãŸãæåã®
-e 's/John/Jane/'ã§"John"ã"Jane"ã«çœ®æãããã®çµæã«å¯ŸããŠæ¬¡ã®-e 's/Hello/Hi/'ãé©çšãããŸããæçµçã«"Hello"ã"Hi"ã«ã"John"ã"Jane"ã«å€ãã£ãçµæãåºåãããŠããŸãã -
ãã®ããã«
sedã§ã¯ã³ãã³ãããã§ãŒã³ãããŠã1åã®ãã¹ã§è€æ°ã®ç·šéãå®çŸã§ããŸãã-eã¯ããã€ãã£ãŠãããããŸã-eãçç¥ããŠ;ã»ãã³ãã³ã§ã³ãã³ããåºåãæžãæ¹ãå¯èœã§ãïŒã·ã§ã«ã®åŒçšã«æ³šæïŒã -
ã¹ã¯ãªãããã¡ã€ã«ã®å©çš: è€éãªå Žåãåå©çšãããå Žåãã³ãã³ãããã¡ã€ã«ã«æžããŠ
-fã§æå®ããŸãã
$ cat edits.sed
s/Apple/APPLE/
s/Banana/BANANA/
s/Cherry/CHERRY/
$ echo "Apple Banana Cherry" | sed -f edits.sed
APPLE BANANA CHERRY
-
edits.sedã«3ã€ã®çœ®æã³ãã³ããæžããŸãããsed -f edits.sedã«ãããã®ã¹ã¯ãªãããã¡ã€ã«ãå®è¡ããŠããŸããçµæãå ¥åã®"Apple"ã"Banana"ã"Cherry"ããããã倧æååãããŠããŸãã -
ã¹ã¯ãªãããã¡ã€ã«å ã§ã¯æ¹è¡ã§ã³ãã³ããåºåããããå¯èªæ§ãé«ããªããŸãããŸãã
#ã§å§ãŸãè¡ã¯ã³ã¡ã³ããšããŠç¡èŠãããã®ã§ãè€éãªã¹ã¯ãªããã®äžã«èª¬æãæžã蟌ãããšãã§ããŸãã
4. ã€ã³ãã¬ãŒã¹ç·šéïŒãã¡ã€ã«çŽæ¥ç·šéïŒ
ç®ç: ãã¡ã€ã«ã®å 容ãçŽæ¥çœ®æã»å€æŽãããããã¯ã¢ãããåãã€ã€ç·šéããã
# ãµã³ãã«ãã¡ã€ã«ã®äœæ
$ echo -e "foo\nbar\nbaz" > sample.txt
$ sed -i.bak 's/bar/BAR/' sample.txt
$ cat sample.txt
foo
BAR
baz
$ cat sample.txt.bak
foo
bar
baz
-
sample.txtãšãããã¡ã€ã«ãçšæãã3è¡ç®ã«"bar"ãå«ãŸããŠããŸãã -
ã³ãã³ã
sed -i.bak 's/bar/BAR/' sample.txtã§ããã¡ã€ã«å ã®"bar"ã"BAR"ã«çœ®æããŸããã-i.bakã«ãããç·šéåã®ãã¡ã€ã«ãsample.txt.bakãšããŠããã¯ã¢ãããããŠããŸãã- ç·šéåŸã®
sample.txtã«ã¯"bar"ã"BAR"ã«å€ãã£ãŠããã®ã確èªã§ããŸãã
-
泚æ: ããã¯ã¢ããæ¡åŒµå
.bakã¯ä»»æã§ããã.ãå é ã«ããŠãããšãªãªãžãã«ã®æ¡åŒµåãæ®ã圢ã§ããã¯ã¢ãããã§ããŸãïŒfile.txtâfile.txt.bakïŒã
ããã¯ã¢ããç¡ãã®ç·šéïŒLinuxã®GNU sedã®å ŽåïŒ:
$ sed -i 's/baz/BAZ/' sample.txt
$ cat sample.txt
foo
BAR
BAZ
-
GNUçã§ã¯
-iã®åŸã«çŽæ¥ã¹ã¯ãªãããæžããŸããäžèšã§ã¯"baz"ã"BAZ"ã«çœ®æããsample.txtãå³ææŽæ°ãããŸãããããã¯ã¢ããã¯äœæãããŸããã -
macOSã®æ³šæ: BSDç
sedã§ããã¯ã¢ããç¡ãã«ããã«ã¯-i ''ã®ããã«ç©ºæååãåŒæ°ãšããŠæž¡ãå¿ èŠããããŸãïŒäŸ:sed -i '' -e 's/baz/BAZ/' fileïŒãGNUçãšã¯åŒæ°ã®æ±ããç°ãªããããã¹ã¯ãªããã®ç§»æ€æã«ã¯æ³šæããŠãã ããã
ãã®ä»: -iã¢ãŒãã§ã¯è€æ°ã®ãã¡ã€ã«ãåæã«æå®å¯èœã§ããäŸãã°sed -i.bak 's/foo/bar/g' *.txtãšãããšããã£ã¬ã¯ããªå
ã®å
šãŠã®.txtãã¡ã€ã«ã«ã€ããŠ"foo"ã"bar"ã«çœ®æããåãã¡ã€ã«ã«.bakããã¯ã¢ãããæ®ããŸããäžæ¬çœ®æã«äŸ¿å©ã§ããã倿ŽãäžåºŠã«è¡ãããã®ã§äºåã«ããã¯ã¢ãããåããã¹ã¯ãªãããååãã¹ãããã®ããã¹ããã©ã¯ãã£ã¹ã§ãã
5. æ£èŠè¡šçŸãšã¢ãã¬ã¹ã®å¿çš
ç®ç: æ£èŠè¡šçŸã«ããé«åºŠãªãã¿ãŒã³ããããšãã¢ãã¬ã¹ç¯å²ã»åŠå®ã掻çšããç·šéã
- æ¡åŒµæ£èŠè¡šçŸã®å©çš: è€æ°ãã¿ãŒã³ã®åæçœ®æã
$ echo "cat or dog" | sed -E 's/(cat|dog)/pet/g'
pet or pet
-
-Eãªãã·ã§ã³ã«ããã(cat|dog)ãšããæ¡åŒµæ£èŠè¡šçŸïŒéžæè¢ãã¿ãŒã³ïŒã䜿ããŸããcatãŸãã¯dogã«ãããããéšåããã¹ãŠpetã«çœ®æããçµæãäž¡æ¹ã"pet"ã«ãªã£ãŠããŸãã -
|ïŒãã€ãïŒã«ãããªã«ã¿ããŒã·ã§ã³ã¯BREïŒåºæ¬æ£èŠè¡šçŸïŒã§ã¯çŽæ¥äœ¿ããªããããæ¡åŒµãæå¹ã«ããããBREã§ã¯\|ãšãšã¹ã±ãŒãããŠèšè¿°ããå¿ èŠããããŸããGNUæ¡åŒµãã -
åæ§ã«ã
+ã?ãªã©ã-Eã§æå¹ã«ãªããŸããäŸãã°ãæ°åãäžã€ä»¥äžç¶ããã¿ãŒã³ã¯BREã§ã¯[0-9][0-9]*ã§ãããEREãªã[0-9]+ãšæžããŸãã -
äœæé²ããé»è©±çªå·ãæœåº: æ£èŠè¡šçŸãš
pïŒãŸãã¯dïŒã§ãã£ã«ã¿ãªã³ã°ã
$ cat contacts.txt
Alice 555-1234
Bob 555-9999
Carol 123-4567
$ sed -n '/[0-9]\{3\}-[0-9]\{4\}/p' contacts.txt
Alice 555-1234
Bob 555-9999
Carol 123-4567
-
äŸãšããŠã
contacts.txtã«ååãšé»è©±çªå·ãæžãããŠãããšããŸããsed -n '/[0-9]\{3\}-[0-9]\{4\}/p'ã¯ãã3æ¡-4æ¡ã®æ°åãã¿ãŒã³ãã«ãããããè¡ã®ã¿è¡šç€ºããã³ãã³ãã§ããåºåçµæã§ã¯ã3æ¡-4æ¡åœ¢åŒã®çªå·ãå«ãŸããè¡ãå šãŠè¡šç€ºãããŠããŸãã -
BREã§ã¯
{3}ã®ãããªéæå®åã¯\{3\}ãšæ³¢æ¬åŒ§ããšã¹ã±ãŒãããŠæžãå¿ èŠããããŸãïŒäžèšã§ã¯é»è©±çªå·ã®ãã¿ãŒã³ã\{3\}-[0-9]\{4\}ãšæžããŠããŸãïŒãEREã䜿ãã°-E '/[0-9]{3}-[0-9]{4}/p'ã®ããã«ç°¡æœã«æžããŸãã -
ãã®æ£èŠè¡šçŸã¯ã·ã³ãã«ãªäŸã§ãããäŸãã°ãæ°å以å€ããå§ãŸãé»è©±çªå·ããªã©åŠå®ã®ãã¿ãŒã³ãçµã¿åãããŠæè»ã«æœåºå¯èœã§ãã
-
ã¢ãã¬ã¹ã®åŠå®äœ¿çš: äŸãã°ããã¡ã€ã«æ«å°Ÿä»¥å€ã®å šè¡ã«ã«ã³ããä»äžãããåŠçã
$ printf "line1\nline2\nline3\n" | sed -e '$!s/$/,/'
line1,
line2,
line3
-
$!ã¯ãæåŸã®è¡ä»¥å€ããæå³ããåŠå®ã¢ãã¬ã¹ã§ããããã«s/$/,/ïŒè¡æ«ãã«ã³ãã«çœ®æãã€ãŸãè¡æ«ã«ã«ã³ãã远å ïŒãé©çšããŠããŸãã -
line1ãšline2ã®æ«å°Ÿã«ã¯ã«ã³ãã远å ãããŸããããæçµè¡line3ã«ã¯è¿œå ãããŠããªãããšãããããŸããããã¯CSVçã®çææã«æ«å°Ÿè¡ã«åºåãæåãã€ããªãçšéãªã©ã«å¿çšã§ããŸãã -
ç¯å²æå®ã®æŽ»çš: äŸãšããŠããã°ããã¹ã¿ãã¯ãã¬ãŒã¹ã®éšåïŒBEGINãENDãããã¯ïŒãåé€ããŠåºåãç°¡ç¥åããã
$ sed '/^BEGIN/,/^END/d' log.txt > cleaned_log.txt
-
^BEGINãã^ENDãŸã§ã®è¡ãç¯å²æå®ããdã§åé€ããŠããŸããçµæããã°äžã®BEGINãENDã§å²ãŸãã詳现æ å ±ãåé€ãããéèŠãªéšåã ããæ®ã£ãcleaned_log.txtãåŸãããŸãã -
ãã®ããã«ã2ã€ã®ãã¿ãŒã³ã§æãŸããç¯å²ãæå®ããŠåŠçïŒåé€ã»è¡šç€ºã»å€æãªã©ïŒããããšãã§ããŸãããªããç¯å²ã®æ€åºã¯é貪欲ã§ã察å¿ããENDãèŠã€ããã°ããã§äžæŠçµäºããæ¬¡ã®BEGINãããã°ãŸãéå§ããšããåäœã«ãªããŸãã
6. æ¹è¡ãè€æ°è¡ãæ±ãæäœ
ç®ç: Sedã¯åå1è¡ãã€åŠçããŸãããã³ãã³ããé§äœ¿ããŠè€æ°è¡ã«ãŸãããç·šéãå¯èœã§ããããã§ã¯æ¹è¡ã®æ±ãããã«ãã©ã€ã³åŠçã®äŸã瀺ããŸãã
- 空è¡ã®åé€: æ¹è¡ã®ã¿ã®è¡ïŒç©ºè¡ïŒã空çœã ãã®è¡ãåé€ããäŸã§ãã
$ printf "line1\n\nline2\n \nline3\n" | sed '/^[[:space:]]*$/d'
line1
line2
line3
-
æ£èŠè¡šçŸ
^[[:space:]]*$ã¯ãè¡é (^)ããè¡æ«($)ãŸã§ç©ºçœé¡ã0å以äžãã®è¡ãã€ãŸã空è¡ãŸãã¯ç©ºçœã ãã®è¡ãæããŸããdã³ãã³ãã§ããããåé€ããŸããã -
çµæãããšããš2è¡ç®ã®å®å šç©ºè¡ãš4è¡ç®ã®ç©ºçœã ãã®è¡ãåãé€ãããæ®ãã®è¡ãè©°ããŠåºåãããŠããŸãã
-
[[:space:]]ã¯POSIXæåã¯ã©ã¹ã§ãç©ºçœæåïŒã¹ããŒã¹ãã¿ãçïŒå šè¬ãæå³ããŸããä»ã«[[:digit:]]ïŒæ°åïŒã[[:alpha:]]ïŒè±åïŒãªã©ããããLocaleã«å¿ããŠé©åã«æåãå€å®ããŸãã\sãªã©PCREã®è¡šèšã¯äœ¿ããªãã®ã§æ³šæããŸãããã -
è€æ°è¡ãçµåããŠåŠç:
Nã³ãã³ããå©çšãã2è¡ãäžåºŠã«æ±ãäŸã§ããäŸãã°ã2è¡ããšã«ãŸãšããŠ1è¡ã«ããã
$ printf "A\nB\nC\nD\n" | sed -n 'N; s/\n/:/; p'
A:B
C:D
-
Nã¯æ¬¡ã®è¡ããã¿ãŒã³ã¹ããŒã¹ã«è¿œå ããã®ã§ã1åã®ãµã€ã¯ã«ã§A\nBããã¿ãŒã³ç©ºéã«å ¥ããŸããs/\n/:/ã§ãã®æ¹è¡ãã³ãã³ã«çœ®æãpã§åºåããŸããã-nãä»ããèªåã§pããããšã§äžèŠãªèªååºåãé¿ããŠããŸãã -
ãããšãå ã®Aè¡ãšBè¡ããA:BããšçµåãããŠåºåãããŸãããåæ§ã«CãšDã"C:D"ã«ãªã£ãŠããŸãã
-
ãã®ããã«ã
Nãšé©åãªçœ®æã䜿ããšè¡ã®ãã¢ãåäœãããããéã«ããã¹ããæ¿å ¥ãããã§ããŸãã -
å èªã¿ä»£ããã®åŠç: äŸãã°ãããè¡ã«ç¶ã次ã®è¡ãåé€ãããã«ã¯ãç¯å²æå®ãã§ããŸãã
Nâæ¡ä»¶âDã§ãå¯èœã§ããã·ã³ãã«ãªäŸãšã㊠"foo"ãšããè¡ã®çŽåŸã®è¡ãåé€ããã±ãŒã¹ãèããŸãã
$ printf "foo\ndelete me\nfoo\nkeep me\n" | sed -n '/^foo/{N; d;}; p'
foo
foo
keep me
-
ã¹ã¯ãªãã解説:
/^foo/ãšããã¢ãã¬ã¹ã§ããè¡é ãfooã«ãããããå Žåãã«ã®ã¿ãããã¯{ ... }å ã®ã³ãã³ããå®è¡ããŸãã{N; d;}ã¯ã該åœè¡ã«ã€ããŠæ¬¡ã®è¡ãèªã¿èŸŒãã§çµåãã ãã®çµåè¡ãdã§åé€ããŠããŸããã€ãŸã"foo\n次ã®è¡"ããã¿ãŒã³ã¹ããŒã¹ã«ããç¶æ ã§dããã®ã§ã"foo"è¡ã"次ã®è¡"ãäž¡æ¹æ¶ããåŠçã¯æ¬¡ã®ãµã€ã¯ã«ãžã¹ãããããŸãã; pã¯ãããã¯å€ã§æå®ãããŠããã-nã¢ãŒããªã®ã§åè¿°ãããã¯ã§åé€ãããªãã£ãè¡ã ããåºåãããŸãã
-
çµæãèŠããšã"foo"ã«ç¶ããŠãã"delete me"ã®è¡ãåé€ããã"foo"è¡èªäœãåºåãããŠããŸããïŒåé€åŠçã§åºååã«åãé€ãããããïŒã2ã€ç®ã®"foo"ã®åŸãã«ã¯"keep me"ããããŸããããããã¯
fooè¡ã«ããããããã"foo\nkeep me"ãåé€ããã"keep me"ã ããæ®ã£ãç¶æ ã§æ¬¡ãµã€ã¯ã«ã«é²ã¿ããããåºåãããŠããŸãïŒpã«ããïŒã -
ãã®äŸã¯é«åºŠãªåŠçã§ããã
Nãšdãçµã¿åãããŠæ¡ä»¶ä»ãã§ãã¢ã®è¡ãåé€ãããã¯ããã¯ã§ããç¯å²æå®/^foo/{N;d}ã§ãé¡äŒŒã®å¹æãåºããŸãã -
ããŒã«ãã¹ããŒã¹ã®å©çšïŒé«åºŠãªäŸïŒ: ãã¿ãŒã³ãšããŒã«ãã䜿ã£ãŠãå šè¡ãéé ã«åºåãããã¯ããã¯ããããŸãã以äžã¯äžäŸã§ãã
$ printf "1\n2\n3\n" | sed -n '1!G; h; $p'
3
2
1
-
åŠçã®æµã:
1!Gã¯1è¡ç®ä»¥å€ã®åè¡ã§ãããŒã«ãã¹ããŒã¹ã®å 容ããã¿ãŒã³ã¹ããŒã¹ã«è¿œå ãããšããæå³ã§ãã1è¡ç®ã¯ç¡èŠããŸãïŒãã®æç¹ã§ããŒã«ãã¯ç©ºãªã®ã§è¿œå ããŠãäœãèµ·ãããŸããïŒãhã¯åãµã€ã¯ã«ã§çŸåšã®è¡ïŒãã¿ãŒã³ã¹ããŒã¹ïŒãããŒã«ãã¹ããŒã¹ã«ã³ããŒããŠããŸããããã§æ¬¡ã®è¡ã«é²ãåã«ãåŠçæžã¿è¡ãããŒã«ãã«èç©ãããŠãããŸãïŒå®éã«ã¯äžæžãã§ãããåã®Gã§ãã¿ãŒã³ã«åŒãæ»ããŠããããçµæçã«é ç¹°ãã«èç©ïŒã$pã¯æåŸã®è¡ã§ãã¿ãŒã³ã¹ããŒã¹ãåºåãããšããæå³ã§ãã
-
ãã®ã¹ã¯ãªããã§ã¯ãåžžã«æ¬¡ã®è¡ãèªãåã«çŸãã¿ãŒã³ã
hã§ããŒã«ãããæ¬¡è¡ãæ¥ããGã§ããŒã«ãïŒã€ãŸãä»ãŸã§ã®è¡ãã¡ïŒãåŸãã«ãã£ã€ããŠããŸããæåŸã®è¡ã«å°éãããšããããŸã§ã®å šè¡ãéé ã«ãã¿ãŒã³ã¹ããŒã¹ã«ç©ãŸããŠããã®ã§ããããpã§åºåããŸãã -
çµæãšããŠã
1\n2\n3\nãšããå ¥åã3\n2\n1\nãšéé ã«åºåãããŸããã -
ãã®ããã«
sedåäœã§ãã¹ã¯ãªããã工倫ããã°é«åºŠãªåŠçãå¯èœã§ãããçè§£ã»ä¿å®ã¯é£ãããªããããå¿ èŠã«å¿ããŠtacã³ãã³ãïŒéé åºåå°çšïŒãawk/ã¹ã¯ãªããèšèªã®å©çšãæ€èšãã¹ãã§ãã
7. ãã®ä»ã®å®çšäŸ
ç®ç: 宿Šçãªããã€ãã®sedã¯ã³ã©ã€ããŒã玹ä»ããŸãã
- ãã¹çœ®ææã®ããªãã¿å·¥å€«: ãã£ã¬ã¯ããªãã¹ãªã©ã¹ã©ãã·ã¥ãå€ãå«ãŸããæååã眮æããå Žåã
/ã®ãšã¹ã±ãŒããç ©éã§ããåºåãèšå·ãå€ããããšã§æ¥œã«ãªããŸãã
$ echo "/home/user/docs" | sed 's#/home/user#~#'
~/docs
-
åºåãã«
#ã䜿ãã/home/userã~ã«çœ®æããŠããŸããã¹ã©ãã·ã¥ãããã¯ã¹ã©ãã·ã¥ã§ãšã¹ã±ãŒãããªããŠè¯ãã®ã§èŠèªæ§ãäžãããŸããçµæã¯~/docsãšãªãããã¹ã®ããŒã ãã£ã¬ã¯ããªéšåããã«ãã«ççž®ã§ããŸããã -
ä»ã«ã
@ã|ãªã©ãæååå ã§äœ¿ããªãã§ãããèšå·ãéžã¶ãšè¯ãã§ãããããã¹ããã©ã¯ãã£ã¹ãšããŠãæ£èŠè¡šçŸã眮ææååã«/ãå«ãŸãããšãã¯ããã®ããã«åºåãæåã倿Žããã®ãããããã§ãã -
ããã¹ãã®æŽåœ¢: è€æ°ã®ç©ºçœã1ã€ã«ãŸãšããïŒãã¯ã€ãã¹ããŒã¹æ£èŠåïŒã
$ echo "a b c" | sed 's/[[:space:]]\+/ /g'
a b c
-
æ£èŠè¡šçŸ
[[:space:]]\+ã¯ç©ºçœæåïŒã¹ããŒã¹ãã¿ãïŒã1ã€ä»¥äžç¶ãã·ãŒã±ã³ã¹ã«ãããããŸãïŒ\+ã¯BREã®æ¡åŒµãGNUããPOSIXã§ã¯[[:space:]][[:space:]]*ãšæžãïŒããããåäžã¹ããŒã¹ã«çœ®æããããšã§ãã©ããªã«ç©ºçœãé£ç¶ããŠã1ã€ã«å§çž®ã§ããŸãã -
gãã©ã°ãä»ããŠè¡å šäœã§ç¹°ãè¿ããã®çœ®æãé©çšããŠããããã"a b c"ã"a b c"ã«ãªããŸããããã°ã®ãã£ãŒã«ããåºåã£ãããCSVãæŽåœ¢ãããããéã«äœ¿ããŸãã -
è¡é ã»è¡æ«ãžã®æå远å : ããã¹ãã®åè¡ã«æ¥é èŸãæ¥å°ŸèŸãä»ããã
$ printf "item1\nitem2\n" | sed 's/^/* /; s/$/!!!/'
* item1!!!
* item2!!!
-
æåã®
s/^/* /ã¯è¡é ^ã*ã«çœ®æããŠããŸãïŒã€ãŸãåè¡ã®å é ã«*ãæ¿å ¥ïŒã2ã€ç®ã®s/$/!!!/ã¯è¡æ«$ã!!!ã«çœ®æïŒæ«å°Ÿã«!!!ã远å ïŒããŠããŸãã -
ããã«ããã
item1ã* item1!!!ã®ããã«å€æãããŸãããMarkdownçšã®ãªã¹ããä»ãå ããããè¡æ«ã«ããŒã«ãŒãå ¥ãããããçšéã«äœ¿ããŸãã -
ãã¡ã€ã«æ«å°Ÿã®æ¹è¡äžè¶³å¯Ÿç: ããã¹ããã¡ã€ã«ã®æåŸã«æ¹è¡ãç¡ãå ŽåãåŠçç³»ã«ãã£ãŠã¯æ±ãã«å·®ãåºãŸããGNU
sedã§ã¯æ«å°Ÿè¡ã«æ¹è¡ãç¡ããŠãåé¡ãªãæ±ããŸãããç¹å®ã®å€æïŒäŸãã°$ã§ã®è¡æ«ãããïŒã§æŒããåºãããšããsedã䜿ã£ãŠæ«å°Ÿã«æ¹è¡ã匷å¶è¿œå ããã«ã¯æ¬¡ã®ããã«ããŸãã
$ sed -e '$a\' -e '}' file.txt
-
ããã¯é«åºŠã§ããã
$a\ïŒæåŸã®è¡ã®åŸã«ç©ºè¡ã远å ïŒãšããããšã§æ«å°Ÿã«æ¹è¡ãè¶³ããŠããŸããå®éã«ã¯-e '}'ã¯ãããŒã§ã'$a\'ã§ã³ãã³ããçµãã£ãŠããŸããšã·ã§ã«äž1è¡ã§æžããªãããã«ä»ããŠããŸãã -
æ«å°Ÿæ¹è¡ã欲ããå Žé¢ã¯å€ããããŸããããç¥èãšããŠè£è¶³ããŸãïŒåçŽã«ã¯ãããã¹ããšãã£ã¿ã§æ«å°Ÿæ¹è¡ãå ¥ããŠãããã
echo >> fileãªã©ã§è¿œå ãã§ããŸãïŒã
以äžãæ§ã
ãªäŸãéããŠsedã®å®çšçãªäœ¿ãæ¹ã玹ä»ããŸãããããããã®äŸã§ã¯ãäžã€äžã€ã®ãªãã·ã§ã³ãã³ãã³ããã©ã®ããã«åäœãããã確èªããŠãã ãããæ¬¡ç« ã§ã¯ãsedã®äžè¬çãªãŠãŒã¹ã±ãŒã¹ããã¹ããã©ã¯ãã£ã¹ã泚æç¹ã«ã€ããŠãŸãšããŸãã
äžè¬çãªäœ¿çšäŸãšãã¹ããã©ã¯ãã£ã¹
sedã¯æ¥åžžã®ããã¹ãåŠçããã·ã¹ãã 管çãããã°ã©ãã³ã°ã«è³ããŸã§å¹
åºã䜿ãããŠããŸããããã§ã¯å
žåçãªãŠãŒã¹ã±ãŒã¹ãšãå¹çããsedã䜿ãããªãããã®ãã¹ããã©ã¯ãã£ã¹ã玹ä»ããŸãã
äžè¬çãªãŠãŒã¹ã±ãŒã¹
-
æ§æãã¡ã€ã«ã®äžæ¬ç·šé: èšå®ãã¡ã€ã«äžã®ãã©ã¡ãŒã¿åãå€ã倿Žããéã
sedã§èªå眮æããã°å€§éã®ãã¡ã€ã«ã§ãç¬æã«æŽæ°ã§ããŸããäŸ:sed -i.bak 's/LogLevel INFO/LogLevel DEBUG/' /etc/httpd/conf/httpd.confã®ããã«ããŠãã°ã¬ãã«èšå®ã倿Žããããã¯ã¢ãããæ®ãã -
ãã°ãã¡ã€ã«ã®ãã£ã«ã¿ãªã³ã°: ã·ã¹ãã ãã°ãã¢ã¯ã»ã¹ãã°ããé¢å¿ã®ããè¡ã ããæœåºããããäžèŠãªè©³çްïŒäŸ: IPã¢ãã¬ã¹ã®äžéšãã¹ã¯ïŒã眮æãããªã©ã
sedã¯ç°¡æãã°ãã£ã«ã¿ãšããŠæŽ»èºããŸããgrepã§ã¯é£ããããããããè¡ã®ååŸè¡ãäžç·ã«è¡šç€º/é€å»ããªã©ããsed '/pattern/,+2d'ã®ããã«ç¯å²æå®ã§å®çŸå¯èœã§ãã -
ããŒã¿å€æã»æŽåœ¢: CSVãTSVã®ãã©ãŒããã倿Žãã¿ã°ä»ãããã¹ãããã®æ å ±æœåºãã¡ãã£ãšããèšç®ïŒé£çªä»äžãªã©ïŒã¯
sedã§æè»œã«ã§ããŸããäŸãã°ããªã¹ããžçªå·ãæ¯ããªãsed = file | sed 'N;s/\n/ /'ã§åè¡çªå·ãä»äžããããšãã§ããŸãïŒæåã®sed =ã§è¡çªå·ãå¥è¡ã«åºããæ¬¡ã®sedã§çµåïŒã -
ã³ãŒãã¡ã³ããã³ã¹: ããã°ã©ã ã®ãœãŒã¹ã³ãŒãä¿®æ£ïŒé¢æ°åã®äžæ¬å€æŽãªã©ïŒã«ã
sedã¯æçšã§ããæ£èŠè¡šçŸã掻çšããã°ãåçŽãªåèªçœ®æä»¥äžã®æèäŸå眮æãå¯èœã§ãããã ããã³ãŒãäžã®æååãªãã©ã«ãã³ã¡ã³ããžã®äžèŠãªåœ±é¿ã«ã¯æ³šæãå¿ èŠãªã®ã§ãç²Ÿç·»ãªæ£èŠè¡šçŸãçµãããå Žåã«ãã£ãŠã¯å°çšããŒã«ãæ€èšããŸãããã -
ã¹ããªãŒã åŠç: ãã€ãã©ã€ã³ã§å段ã®åºåããªã¢ã«ã¿ã€ã ã«åŠçããéã«ã䜿ãããŸãã
tail -f logfile | sed -u 's/ERROR/\x1b[31m&\x1b[0m/'ã®ããã«ããã°ãã°ç£èŠã§"ERROR"ãèµ€ã衚瀺ïŒANSIãšã¹ã±ãŒãïŒãããšãã£ãããšãå¯èœã§ããGNUãã-uãªãã·ã§ã³ãä»ããã°ãããã¡ãªã³ã°ããããåºåããããããªã¢ã«ã¿ã€ã æ§ãç¶æã§ããŸãã -
ç°¡æããã¹ãçæã»ãã³ãã¬ãŒãåŠç:
sedã¯äœçœ®ããã¿ãŒã³ã«å¿ããŠããã¹ããæ¿å ¥ã§ããã®ã§ãã¹ã¯ãªããå ã§å®åã®ãã¡ã€ã«ãçæããå Žé¢ã«ãå©çšãããŸããäŸãã°ããã¡ã€ã«å é ã«ãããæãå ¥ããïŒ1i\ïŒããã¡ã€ã«æ«å°Ÿã«ããã¿ãå ¥ããïŒ$a\ïŒãæ¯è¡ã®ç¹å®éšåãç°å¢å€æ°ã®å€ã«çœ®æããŠèšå®ãã¡ã€ã«ãäœãããªã©å¿çšç¯å²ã¯åºãã§ãã
ãã¹ããã©ã¯ãã£ã¹
-
ã·ã³ã°ã«ã¯ã©ãŒãã§å²ã:
sedã®ã¹ã¯ãªããéšåïŒçœ®æãã¿ãŒã³ãªã©ïŒã¯**ã·ã³ã°ã«ã¯ã©ãŒã' '**ã§å²ãã®ãåºæ¬ã§ããããããããšã§ã·ã§ã«ã«ãã倿°å±éãã¡ã¿ãã£ã©ã¯ã¿ã®å¹²æžãé²ããŸããäŸãã°ãsed 's/$HOME/\/home\/user/'ã§ã¯ HOMEãã·ã§ã«å±éãããæååãšããŠæ±ãããŸããã©ãããŠãã·ã§ã«å€æ°ã䜿ãããå Žåã¯ãã·ã³ã°ã«ã¯ã©ãŒããäžåºŠéããŠå€æ°ãæ¿å ¥ããå床ã¯ã©ãŒããéãæ¹æ³ãå®å šã§ãïŒäŸ:âsed"s/PLACEHOLDER/var/" file`ïŒãH O M E ãã·ã§ã«å±éãããæååãšããŠæ±ãããŸããã©ãããŠãã·ã§ã«å€æ°ã䜿ãããå Žåã¯ãã·ã³ã°ã«ã¯ã©ãŒããäžåºŠéããŠå€æ°ãæ¿å ¥ããå床ã¯ã©ãŒããéãæ¹æ³ãå®å šã§ãïŒäŸ : â s e d " s / P L A C E H O L D E R / HOMEãã·ã§ã«å±éãããæååãšããŠæ±ãããŸããã©ãããŠãã·ã§ã«å€æ°ã䜿ãããå Žåã¯ãã·ã³ã°ã«ã¯ã©ãŒããäžåºŠéããŠå€æ°ãæ¿å ¥ããå床ã¯ã©ãŒããéãæ¹æ³ãå®å šã§ãïŒäŸ: `sed "s/PLACEHOLDER/ -
æ£èŠè¡šçŸã¯æ£ç¢ºã«ãšã¹ã±ãŒã:
sedã®BREã§ã¯ã¡ã¿æåãšãªãã©ã«ã®åºå¥ãããè€éã§ããäžè¬ã«ãã. [ ] * ^ $ \ ( )ããªã©ã¯ç¹å¥ãªæå³ãæã€ã®ã§ããªãã©ã«ãšããŠäœ¿ãå Žåãšã¹ã±ãŒãããŸããäŸãã°ãããããæ¢ããšãã¯\.ãã¢ã¹ã¿ãªã¹ã¯ãã®ãã®ãæ¢ããšãã¯\*ã§ããéã«ãã©ã¹+ã?ã¯BREã§ã¯ãªãã©ã«æ±ããªã®ã§ãéæå®åãšããŠæ©èœãããã«ã¯\+\?ãšãšã¹ã±ãŒãããïŒå®è³ªçã«æ¡åŒµæ£èŠè¡šçŸã®äžéšã䜿ãïŒãã-Eãªãã·ã§ã³ãæ€èšããŸãã -
èªã¿ãããã¹ã¯ãªãããæžã: ã¯ã³ã©ã€ããŒã¯äŸ¿å©ã§ãããè€éã«ãªãããããšå¯èªæ§ãäœäžããŸããã¡ã³ããã³ã¹æ§ãé«ããããã以äžã®å·¥å€«ããããšè¯ãã§ããã:
- ã³ãã³ãã
-eã§è€æ°è¡ã«åå²ããããã¹ã¯ãªãããã¡ã€ã«ïŒ.sedãã¡ã€ã«ïŒã«èšè¿°ããã - ã¹ã¯ãªãããã¡ã€ã«å
ã§ã¯ã³ã¡ã³ã(
#)ãæŽ»çšããåã¹ãããã®æå³ãæèšããã - ãšã¯ã¹ããŒããã
sedã¹ã¯ãªãããGitãªã©ã§ç®¡çããã°ãä»ã®äººãçè§£ãããããªããŸãã
- ã³ãã³ãã
-
ããŒã«éžæ:
sedã¯åŒ·åã§ãããããããããšã«ãã£ãŠã¯ä»ã®å°çšããŒã«ã®æ¹ãé©åãªå ŽåããããŸããäŸãã°ãè€éãªéèšãè§£æã«ã¯awkãperlãå€§èŠæš¡ãªXML/JSONåŠçã«ã¯å°çšããŒãµãªã©ãsedã§ç¡çã«å®è£ ããããšããŠã¹ã¯ãªãããæ¥µç«¯ã«é£è§£ã«ãªããããªããããŒã«ã®äœ¿ãåããæ€èšããŸãããããã ããsedã§æ°è¡ã§æžãããããªåçŽçœ®æããã£ã«ã¿ã¯ãèµ·åã³ã¹ããäœãã¹ã¯ãªããã«çµã¿èŸŒã¿ãããã®ã§ç©æ¥µçã«äœ¿ã䟡å€ããããŸãã -
ããã¯ã¢ãããšãã¹ã: ç¹ã«
-iïŒã€ã³ãã¬ãŒã¹ç·šéïŒã䜿ããšãã¯ãå¿ ãçµæã確èªãããããã¯ã¢ãããåãçãã€ããŸãããã-i.bakã§ããã¯ã¢ãããã¡ã€ã«ãæ®ãã®ãæè»œã§ããã¹ã¯ãªããã詊ããšãã¯æšæºåºåã§ç¢ºèªããŠããå®ãã¡ã€ã«ã«é©çšããæ³å®å€ã®çœ®æãèµ·ããŠããªããã確èªããŸãã
äžåºŠã«è€æ°ãã¡ã€ã«ã倿Žããå Žåãéå®çãªãã¿ãŒã³ã§ãã¹ãããŠããç¯å²ãåºããããããŒãžã§ã³ç®¡çäžã§è¡ãå ã«æ»ããããã«ããŠããã®ãããããã§ãã -
POSIXæºæ ã®æè:
sedã¹ã¯ãªãããæ§ã ãªUnix/Linuxç°å¢ã§å®è¡ããå Žåã¯ãã§ããéãPOSIXæºæ ãå¿ãããŸããäŸãã°ã-E/-rã\|\+ãªã©ã®æ¡åŒµè¡šçŸãIãã©ã°ã-zãªãã·ã§ã³ãTã³ãã³ããªã©ã¯å©çšç°å¢ã«äŸåããŸããããŒã¿ãã«ã«ãããªãããããé¿ããåºæ¬æ©èœã®çµã¿åããã§è§£æ±ºã§ããªããæ€èšããŸãããããŸããGNUçsedãã䜿ããªãåæãªãã¹ã¯ãªããåé ã«#!/bin/sed -fãšæžããŠã·ã§ã«ã¹ã¯ãªãã颚ã«å®è¡ããããããã¥ã¡ã³ãã«GNU sedãå¿ èŠãšæèšããã®ãæã§ãã -
æ§èœ:
sedã¯Cèšèªã§å®è£ ãããäœã¬ãã«ã®ã¹ããªãŒã ãšãã£ã¿ã§ãå€ãã®å Žåéåžžã«é«éã§ãããã ããæ£èŠè¡šçŸã極端ã«è€éã ã£ãããsedã§ç¡çãªããžãã¯ãåã£ãããããšæ§èœãåºãªãããšããããŸããäŸãã°ã巚倧ãã¡ã€ã«ãåŠçããéã¯ãäžèŠãªåŠçãæããããqã§æ©ãã«çµäºãããè€æ°ã®ãã€ããäžã€ã®sedã«ãŸãšãããawkãšåœ¹å²åæ ããçã§æ¹åã§ããŸãã
äžè¬ã«ã¯sedã¯IOããŠã³ãã®åŠçïŒããã¹ãèªã¿æžããäž»ïŒã§ã¯ååé«éã§ãããCPUããŠã³ãïŒæ£èŠè¡šçŸãããäœçŸäžåïŒã®åŠçã§ã¯æ³šææ·±ãæžãå¿ èŠããããŸãã
泚æç¹ã»èœãšã穎
æåŸã«ãsedã䜿ãäžã§æ°ãä»ããããã€ã³ããé¥ããã¡ãªãã¹ã«ã€ããŠãŸãšããŸãã
-
ãªãã·ã§ã³ã®äºææ§: äžã§ãè¿°ã¹ãéãã
-iã-Eçã®æåã¯ç°å¢ã«ãã£ãŠç°ãªããŸããç¹ã«macOSã®sedãšLinuxã®sedã¯åŸ®åŠãªéããå€ãã®ã§ãã¹ã¯ãªãããç§»æ€ããéã¯æ³šæããŠãã ãããäŸãã°macOSã§sed -i 's/x/y/' fileãšæžããšãšã©ãŒã«ãªããŸãïŒããã¯ã¢ããæ¡åŒµåç¡ãã§ã¯åããªãïŒããGNUæ¡åŒµã®æ£èŠè¡šçŸã䜿ãããã¹ã¯ãªãããBSDçã§å®è¡ãããšæå³éãåããªãå¯èœæ§ããããŸããéçºç°å¢ãšæ¬çªç°å¢ã®sedå®è£ å·®ã«ã¯åžžã«æ³šæãæããŸãããã -
ã·ã§ã«ã§ã®ãšã¹ã±ãŒã:
sedã¹ã¯ãªããå ã®\ïŒããã¯ã¹ã©ãã·ã¥ïŒã$èšå·ã¯ãã·ã§ã«ã«ãç¹æ®ãªæå³ãæã¡ãŸããã·ã³ã°ã«ã¯ã©ãŒãã§å²ãã°ã·ã§ã«ã¯ä»å ¥ããŸããããããã«ã¯ã©ãŒãã䜿ã£ãããã¹ã¯ãªããã倿°ã«å ¥ããããããšã·ã§ã«å±éãããŠããŸããŸãããã®çµæã\nãæ¹è¡ã«åãããã$1ã空ã«ãªã£ããããŸããæ³å®å€ã®ã·ã§ã«çœ®æã§sedã¹ã¯ãªãããå£ããŠããªãããçããããšãã¯ãšã³ãŒããŠç¢ºèªãããã·ã³ã°ã«ã¯ã©ãŒãã«çµ±äžããŸãããã -
æ£èŠè¡šçŸã®æãã¬ããã:
sedã®æ£èŠè¡šçŸã¯åºæ¬çã«æå€§ãããïŒgreedyïŒã§ããäŸãã°/.*/ã¯è¡å šäœã«ãããããŸããã/0*/ã¯ã0ã0å以äžããªã®ã§åžžã«çã«ãªã£ãŠããŸããŸãããŸãã^ã$ã¯åè¡ã®å é ã»æ«å°Ÿã®ã¿ãããããŸãïŒãã«ãã©ã€ã³åŠçæã«\nã«ã¯ãããããªãïŒãè€éãªæ£èŠè¡šçŸãæžãéã¯äžåºŠgrep -Eãªã©ã§ãã¹ãããæåŸ éãã®ç¯å²ããããããŠããã確èªãããšå®å¿ã§ããsedã«ã¯Perläºææ£èŠè¡šçŸã®ãããªé貪欲 (lazy) ãªéæå®åã¯ç¡ãã®ã§ãå¿ èŠãªãä»£æ¿ææ³ïŒ[^x]*? ã«çžåœããåŠå®ã¯ã©ã¹ã䜿ãçïŒãèããå¿ èŠããããŸãã -
眮æã«ããå¢å¹ :
&ã\1ãªã©ã䜿ã£ã眮æã§ãæãã¬çµæã«ãªãããšããããŸããäŸãã°sed 's/.*/& &/'ãšãããšåè¡ãäºéã«ç¹°ãè¿ãããŸããããã¿ãŒã³ã空æåã«ãããããããšç¡éã«å¢å¹ ããŸããå ·äœçã«ã¯sed 's/*/X/'ã®ããã«*ããšã¹ã±ãŒããå¿ãããšã0æåã«ããããâç¡éã«ãããããšãªããsedã¯ç¡éã«ãŒãã«é¥ããŸããçãããå Žåã¯å¯Ÿè±¡ãã¡ã€ã«ã§ãã¹ãããå®è¡ãçµãããªãã»çµæãµã€ãºãççºçã«å€§ãããªããªããæ³šæããŸãããã -
æ¹è¡ã»ç¹æ®æåã®æ±ã: æšæºçãª
sedã§ã¯ãæ£èŠè¡šçŸå ã§\nã¯æ¹è¡æåãã®ãã®ãæå³ããéåžžã®è¡åŠçã§ã¯ãã¿ãŒã³ã¹ããŒã¹ã«æ¹è¡ãå«ãŸãªããããããããŸããïŒNãªã©ã§æ¹è¡ããã¿ãŒã³ã¹ããŒã¹ã«å ¥ã£ãå Žåã®ã¿æå¹ïŒããŸãã\rïŒCR: 埩垰ïŒã\tïŒã¿ãïŒãªã©ã¯çŽæ¥ã¯äœ¿ããŸãããã¿ãæåã¯ãªãã©ã«ã§æžãããã·ã§ã«ã®ãšã¹ã±ãŒãïŒäŸãã°$'\t'ïŒãå©çšããŠæž¡ãå¿ èŠããããŸããWindowsã®CR+LFæ¹è¡ãåŠçããéã¯ããŸã\rãé€å»ããsed 's/\r$//'ãè¡ããšããã§ãããã -
NULæå:
sedã¯ããã¹ãåŠçãåæã®ãããNULæåïŒ0x00ïŒãå«ãããŒã¿ã¯æ£ããæ±ããŸãããNULã¯æååã®çµç«¯ãšèŠãªããããã以éãèªã¿é£ã°ãå®è£ ããããŸããGNU sedã§ã¯-zã§NULåºåãåŠçãå¯èœã§ãããå®å šã«ãã€ããªã»ãŒããšã¯èšããŸããããã€ããªãã¡ã€ã«ãç·šéããããNULãå«ãããŒã¿ãæ±ãã«ã¯ãå¥ã®ã¢ãããŒãïŒtrã§åé€ãperlã®ãã€ããªã¢ãŒããªã©ïŒãæ€èšããŸãããã -
巚倧ãã¡ã€ã«ãžã®é©çš:
sedèªäœã¯ã¹ããªãŒã åŠçãªã®ã§ã®ã¬ãã€ãçŽã®ãã¡ã€ã«ã§ãåŠçå¯èœã§ãããsedã¹ã¯ãªããæ¬¡ç¬¬ã§ã¯ã¡ã¢ãªæ¶è²»ãå¢ããŸããç¹ã«Nã³ãã³ãã§äœäžè¡ããã蟌ãã ããããŒã«ãã¹ããŒã¹ã«å€§éããŒã¿ãèããããããšã¡ã¢ãªãå§è¿«ããŸãããŸããäžåºŠã«å·šå€§ãã¡ã€ã«ãåŠçããéã¯åºåå ã«ãæ°ãé ããŸããããã¿ãŒããã«ã«å€§éåºåãããšé ããªãã®ã§ããã€ãã§å¥ã³ãã³ãã«æž¡ãããªãã€ã¬ã¯ãã§ãã¡ã€ã«ä¿åããã®ãçŸå®çã§ãã -
æå³ãã¬ãããç¯å²: ç¯å²æå®
addr1,addr2ã¯æåã«addr1ããããããŠããaddr2ãããããããŸã§å šãŠã®è¡ã«ã³ãã³ãé©çšãããŸããaddr2ã«ãããããè¡ãååšããªãå Žåãaddr1以éæåŸãŸã§ãç¯å²ã«å«ãŸããŠããŸããŸãããã®ãããäŸãã°/BEGIN/,/END/dã§ENDããã¡ã€ã«äžã«ãªããšãBEGIN以éãå šéšåé€ãããŸããããããã±ãŒã¹ã§ã¯/BEGIN/,/END/ { /END/!d }ã®ããã«ENDãç¡ãå Žåã®åäœãèæ ®ããããããããå ¥åããŒã¿ã®åæã確èªããå¿ èŠããããŸãã
以äžã®ç¹ã«æ³šæããªãããsedãæŽ»çšããŠãã ãããsedã¯èŠããããšãå€ãæããããŸãããäžåºŠã³ããæŽãã°ããã¹ãåŠçã®åŒ·åãªæŠåšãšãªããŸããã§ã¯ãçè§£åºŠãæ·±ããããã«ç·Žç¿åé¡ã«ææŠããŠã¿ãŸãããã
æŒç¿åé¡ïŒç·Žç¿ãšè§£çïŒ
以äžã«ãsedã®ç解床ã確èªããããã®æŒç¿åé¡ã5åçšæããŸããã é£æåºŠã¯åçŽããäžçŽãŸã§æ§ã
ã§ããããããã®åé¡ã«å¯Ÿããè§£çäŸãšãªãã³ãã³ããšç°¡åãªè§£èª¬ã瀺ããŸãã
åé¡1: 空è¡ã®åé€ïŒåçŽïŒ
次ã®ãããªããã¹ããã¡ã€ã«input.txtããããŸãïŒè¡çªå·ã¯èª¬æçšã«ä»äžïŒ:
1: Apple
2:
3: Banana
4:
5:
6: Cherry
ãã®ãã¡ã€ã«ãã空è¡ïŒäœãæžãããŠããªãè¡ïŒãå
šãŠåé€ããŠãã ãããsedã³ãã³ãäžçºã§å®è¡ããŠã¿ãŸãããã
è§£çäŸ:
sed '/^$/d' input.txt
åºåçµæ:
Apple
Banana
Cherry
解説: ^$ã¯ãè¡é ããè¡æ«ãŸã§äœããªãè¡ããè¡šãæ£èŠè¡šçŸã§ããã¢ãã¬ã¹/^$/ãæå®ãããã®è¡ã«å¯ŸããŠdïŒåé€ïŒãå®è¡ããŠããŸãã該åœè¡ã¯åºåãããã«ã¹ãããããããããçµæãšããŠç©ºè¡ãé€å»ãããããã¹ããæšæºåºåã«åŸãããŸãã
ããã«ç©ºçœæåã ãã®è¡ãåé€ãããå Žåãæ£èŠè¡šçŸã/^[[:space:]]*$/dã®ããã«å€æŽããã°ã¹ããŒã¹ãã¿ãã®ã¿ã®è¡ãå«ããŠåé€ã§ããŸãã
åé¡2: ç¯å²æå®ã«ããæãåºãïŒåçŽïŒ
ãã°ãã¡ã€ã«app.logããã10è¡ç®ãã20è¡ç®ãŸã§ã®éšåã ããæãåºããŠè¡šç€ºããŠãã ãããsedãäœ¿ãæ¹æ³ã瀺ããªããã
è§£çäŸ:
sed -n '10,20p' app.log
解説: ã¢ãã¬ã¹ç¯å²ãšããŠ10,20ãæå®ããpã³ãã³ãã§ãã®ç¯å²ã®è¡ã衚瀺ããŠããŸãã-nãªãã·ã§ã³ãä»ããŠãããããæå®ç¯å²å€ã®è¡ã¯åºåãããŸããã
ãã®ã³ãã³ãã ãã§ãåäœããŸãããsedã¯21è¡ç®ä»¥éãåŠçïŒèªã¿èŸŒã¿ïŒã¯ç¶ããŠããŸãããã¡ã€ã«ãéåžžã«å€§ããå Žåã¯ã20è¡ç®ã§åŠçãçµããããã«21qã远å ãããšå¹çãè¯ããªããŸããäŸ: sed -n '10,20p;21q' app.log
ããã«ãã21è¡ç®ã§åŒ·å¶çµäºïŒquitïŒããç¡é§ãªèªã¿èŸŒã¿ãé²ããŸãã
åé¡3: æ¡ä»¶ä»ã眮æãšåºåïŒäžçŽïŒ
ããã¹ãäžã«"apple"ãšããåèªãå«ãŸããå Žåããã®åèªã"orange"ã«çœ®æãããã€ãã®è¡ã ãã衚瀺ããããšããŸãããã以å€ã®è¡ã¯è¡šç€ºããŸãããäžèšã®åäœãè¡ãsedã³ãã³ããæžããŠãã ããã
è§£çäŸ:
sed -n 's/apple/orange/p' input.txt
解説: -nãªãã·ã§ã³ã«ããéåžžã®åºåãæå¶ããŠããŸãã眮æã³ãã³ãs/apple/orange/pã«ã¯pãã©ã°ãä»ããŠãããããå®éã«çœ®æãè¡ãããè¡ã®ã¿ãåºåãããŸããããã«ããã"apple"ãå«ãŸãªãè¡ã¯ãããã眮æãèµ·ããã衚瀺ããããŸãããäžæ¹"apple"ã"orange"ã«çœ®æãããè¡ã«ã€ããŠã¯ã倿åŸã®å
容ãåºåãããŸãã
äŸãã°input.txtã®å
容ã以äžã ã£ãå Žå:
I have an apple.
I like fruit.
An apple a day.
äžèšã³ãã³ãã®åºåã¯:
I have an orange.
An orange a day.
1è¡ç®ãš3è¡ç®ã§"apple"â"orange"ã®çœ®æãè¡ãããè¡ã衚瀺ãããŠããŸãã2è¡ç®ã¯"apple"ããªããããåºåãããŸããã
</details>åé¡4: è¡ã®æ¿å ¥ïŒäžçŽïŒ
ãã¡ã€ã«config.cfgå
ã§ãè¡é ã#ã§å§ãŸãè¡ã¯ã³ã¡ã³ãè¡ã衚ããŠããŸããã³ã¡ã³ãè¡ïŒ#ã§å§ãŸãè¡ïŒã®çŽåŸã«ããã®è¡ã¯ã³ã¡ã³ãã§ãããšããæ³šéè¡ãæ°ãã«æ¿å
¥ããããšããŸãïŒæ¢åã®è¡ã¯ãã®ãŸãŸã«ãçŽåŸã«è¿œå ïŒããã®æäœãè¡ãsedã³ãã³ããæžããŠãã ããã
è§£çäŸ:
sed '/^#/a\ ãã®è¡ã¯ã³ã¡ã³ãã§ã' config.cfg
解説: /^#/ã¯ãè¡é ã«#ãããè¡ããæãã¢ãã¬ã¹ã§ããa\ã³ãã³ãã¯ãããããè¡ã®åŸã«ããã¹ããæ¿å
¥ããŸããa\ ãã®è¡ã¯ã³ã¡ã³ãã§ãã«ããã該åœè¡ã®çŽäžã«ããã®è¡ã¯ã³ã¡ã³ãã§ãããšããæååãæ°ããªè¡ãšããŠè¿œå ãããŸãã
sedã®ã¹ã¯ãªããäžã§a\ã«ç¶ããŠèšè¿°ããããã¹ãã¯ãæ¬æ¥æ¹è¡ããŠæžãå¿
èŠããããŸããããããäžèšã®ããã«ã·ã§ã«ã¯ã³ã©ã€ããŒã§ç°¡åãªäžè¡ãæ¿å
¥ããå Žåãã³ãã³ãå
šäœãã·ã³ã°ã«ã¯ã©ãŒãã§å²ã¿ã\ã®çŽåŸã«åè§ã¹ããŒã¹ã1ã€å
¥ããããšã§ãã·ã§ã«äžã§ãèšè¿°å¯èœã«ããŠããŸãããããããããŸãåäœããªãå Žåã¯ä»¥äžã®ããã«æžãããšãã§ããŸãã
sed -e '/^#/a\' -e 'ãã®è¡ã¯ã³ã¡ã³ãã§ã' config.cfg
ãã®ããã«-eã§åºåããšã1ã€ç®ã®-eã§a\ãæç€ºããæ¬¡ã®-eã§æ¿å
¥ããæååãæå®ã§ããŸããã¹ã¯ãªãããã¡ã€ã«ã«æžãå Žåã¯åçŽã«æ¹è¡ããŠæžãã°OKã§ãã
åé¡5: è¡ã®éé åºåïŒäžçŽïŒ
ãã¡ã€ã«list.txtã®å
šè¡ãéé ã«åºåããsedã³ãã³ããæžããŠãã ãããäŸãã°ãlist.txtã以äžã®å
容ã§ããã°:
Apple
Banana
Cherry
ãããéé ã«ããŠã
Cherry
Banana
Apple
ãšåºåããããã«ããŸãã
<details> <summary>è§£çãèŠã</summary>è§£çäŸ:
sed -n '1!G; h; $p' list.txt
解説: ããã¯sed䜿ãããªãã®å®çªããªãã¯ã®äžã€ã§ããåäœã段éçã«èª¬æããŸãã
-
1!Gã¯ã1è¡ç®ä»¥å€ã®åè¡ã§ããŒã«ãã¹ããŒã¹ã®å 容ããã¿ãŒã³ã¹ããŒã¹ã«è¿œå ããã³ãã³ãã§ãã1è¡ç®ã§ã¯å®è¡ãããŸããïŒ!ã¯åŠå®ïŒãååã¯ããŒã«ãã空ãªã®ã§äœãèµ·ãããŸãããã2è¡ç®ä»¥éã¯åã®è¡ãããŒã«ãããåãåºããŠçŸåšã®è¡ã®äžã«ãã£ã€ããŸãã -
hã¯çŸåšã®è¡ïŒãã¿ãŒã³ã¹ããŒã¹ã®å 容ïŒãããŒã«ãã¹ããŒã¹ã«ã³ããŒããŸããåè¡åŠçåŸã次ã®è¡ã«åããŠçŸåšãŸã§ã®éé èç©ãããŒã«ãã«ä¿åãã圹å²ã§ãã -
$pã¯æçµè¡ã§ãã¿ãŒã³ã¹ããŒã¹ãåºåããæç€ºã§ããæçµè¡ã®ãã¿ãŒã³ã¹ããŒã¹ã«ã¯å šè¡ãé転ããç¶æ ã§èç©ãããŠãããããããã衚瀺ããŸãã
ãã®ã¹ã¯ãªããã«ãããå
šè¡ãéé ã«åºåãããŸãã
æ€èšŒ: äžèšã®Apple, Banana, Cherryã®äŸãå®è¡ãããšã
$ sed -n '1!G; h; $p' list.txt
Cherry
Banana
Apple
ãšãªããæåŸ éãéé ã«ãªã£ãŠããŸãã
</details>以äžã§æŒç¿åé¡ã¯çµäºã§ããååé¡ãéããŠsedã®åºæ¬ããå¿çšãŸã§æ§ã
ãªäœ¿ãæ¹ãç·Žç¿ã§ããããšæããŸããä»åŸã¯å®éã«æãåããã€ã€ãsedã³ãã³ãã«ç¿çããŠãã ãããå¿
èŠãªæã«ãã®è§£èª¬ãæ¯ãè¿ããããå¹ççãªã·ã§ã«ã¹ã¯ãªããã©ã€ããéããããšãé¡ã£ãŠããŸãã