<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>シェルスクリプト &#8211; スグブログ</title>
	<atom:link href="https://sugublog.org/tag/%E3%82%B7%E3%82%A7%E3%83%AB%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88/feed/" rel="self" type="application/rss+xml" />
	<link>https://sugublog.org</link>
	<description>ブログ運営について発信中</description>
	<lastBuildDate>Mon, 03 Jun 2024 13:50:50 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://sugublog.org/wp-content/uploads/2021/07/icon_20210703-min-150x150.png</url>
	<title>シェルスクリプト &#8211; スグブログ</title>
	<link>https://sugublog.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【シェルスクリプト】正規表現を使う方法と詳細解説</title>
		<link>https://sugublog.org/shellscript-regular-expression/</link>
					<comments>https://sugublog.org/shellscript-regular-expression/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Tue, 12 Mar 2024 02:01:16 +0000</pubDate>
				<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[正規表現]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6520</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/freelance-1024x542.jpg" class="webfeedsFeaturedVisual" /></p>シェルスクリプトでの正規表現は難しくて、疎かになっていないでしょうか？ 便利そうだけど理解が出来ずに、手を付けずにここまで来たあなたの為に、今回シェルスクリプトでの正規表現についてまとめます。 正規表現を極めることでシェ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/freelance-1024x542.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトでの正規表現</span></strong>は難しくて、疎かになっていないでしょうか？</p>



<p>便利そうだけど理解が出来ずに、手を付けずにここまで来たあなたの為に、今回シェルスクリプトでの正規表現についてまとめます。</p>



<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">正規表現</span></strong>を極めることで<strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトの質</span></strong>が上がる事は間違いありません。</span></p>



<p>理解しやすいように表にしてまとめたり、シェルスクリプトの例文を使用して現役エンジニアの筆者が教えます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<p>今まで避けてきた<strong><span class="swl-inline-color has-swl-deep-01-color">正規表現</span></strong>を極めて、<strong><span class="swl-inline-color has-swl-deep-01-color">効率よいシェルスクリプト</span></strong>を作成できるようになりましょう！</p>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトで正規表現についての詳細解説</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="666" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-1024x666.jpg" alt="code" class="wp-image-4186" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-1024x666.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-300x195.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-768x499.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">シェルスクリプトの正規表現の種類について</h3>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトの正規表現</span></strong>について2種類あります。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>シェルスクリプトでの2種類の正規表現</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>基本正規表現</li>



<li>拡張正規表現</li>
</ul>
</div></div>



<p>基本正規表現と拡張正規表現とどちらを学べば良いでしょうか？</p>



<p>結論は<span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">拡張正規表現</span></strong>を学べば良い</span>です。少し違いがあるだけで基本はコマンドにオプションをつけるだけで拡張正規表現になるので楽です。</p>



<p class="is-style-big_icon_point">基本の方を学びたくなる気持ちもわかりますが、対応していない文字などもあるので拡張正規表現だけでも問題ありません。</p>



<h3 class="wp-block-heading">正規表現で重要になってくるメタ文字とは</h3>



<p>また<span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">正規表現</span></strong>を使用するにあたり重要になってくるのが、<strong><span class="swl-inline-color has-swl-deep-01-color">メタ文字</span></strong>です。</span></p>



<p class="is-style-icon_announce">メタ文字とは正規表現を使用する上で、普通の文字列ではないある効果を持っている文字です。</p>



<p>このメタ文字がややこしいので、表でわかりやすいようにまとめます。</p>



<h3 class="wp-block-heading">正規表現はシェルスクリプトのどのような所で使用されるのか</h3>



<p><span class="swl-marker mark_orange">シェルスクリプトでよく<strong><span class="swl-inline-color has-swl-deep-01-color">正規表現</span></strong>が使用されるのは主に<strong>「文字検索」</strong>と<strong>「置換」</strong>です。</span>あとは条件分岐のifでたまに正規表現が出てくるくらいです。</p>



<p><span class="swl-bg-color has-swl-deep-01-background-color">シェルスクリプトの「文字検索」</span>で使用されるコマンドは主に<strong><span class="swl-inline-color has-swl-deep-01-color">「grep」</span></strong>コマンドです。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-300x250.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shellscript-grep/">【シェルスクリプト】grepで文字列を抽出する方法！正規表現も使用します</a>
						<span class="p-blogCard__excerpt">Linuxでシェルスクリプトのgrepのやり方がよくわかりません。オプションや正規表現を使用した文字列抽出を行いたいです。 そういった声が多いので今回はシェルスクリプ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p><span class="swl-bg-color has-swl-deep-02-background-color">シェルスクリプトの「置換」</span>で使用されるコマンドは主に<strong><span class="swl-inline-color has-swl-deep-02-color">「sed」</span></strong>コマンドです。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/11/programing_1122-4-300x164.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shellscript-sed/">【シェルスクリプト】sedで置換する方法！変数や正規表現も使用する</a>
						<span class="p-blogCard__excerpt">シェルスクリプトでよく使うものに置換があります。「sed s」コマンドを使用しますが、書き方など難しいと思った事はないでしょうか？ 記述の仕方が難しいのでとっつき&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">シェルスクリプトで正規表現を使う方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="782" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-8-1024x782.jpg" alt="シェルスクリプト記述" class="wp-image-4802" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-8-1024x782.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-8-300x229.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-8-768x586.jpg 768w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-8.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトの正規表現</span></strong>を実際に見ていきます。</p>



<p>一気に見るとややこしいので、正規表現に使用するメタ文字を用途に分けてまとめます。</p>



<h2 class="wp-block-heading">正規表現の文字や文字の位置を示すメタ文字</h2>



<h3 class="wp-block-heading">正規表現の文字や文字の位置を示すメタ文字</h3>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>.</td><td>.</td><td>何かしらの1文字</td></tr><tr><td>^</td><td>^</td><td>最初の文字</td></tr><tr><td>$</td><td>$</td><td>最後の文字</td></tr><tr><td>[]</td><td>[]</td><td>限定文字指定</td></tr><tr><td>[^]</td><td>[^]</td><td>限定文字以外</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる正規表現一覧</figcaption></figure>



<h3 class="wp-block-heading">実際のメタ文字を使用した正規表現例</h3>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現</th><th>拡張正規表現メタ文字</th><th>抽出例</th></tr></thead><tbody><tr><td>&#8216;roo.&#8217;</td><td>&#8216;roo.&#8217;</td><td>root,rooa,roob</td></tr><tr><td>&#8216;^root&#8217;</td><td>&#8216;^root&#8217;</td><td>root,roota,rootab</td></tr><tr><td>&#8216;nologin$&#8217;</td><td>&#8216;nologin$&#8217;</td><td>aaaanologin,bbbnologin</td></tr><tr><td>&#8216;roo[stu]&#8217;<br>&#8216;roo[s-u]&#8217;<br>&#8216;roo[1-3]&#8217;</td><td>&#8216;roo[stu]&#8217;<br>&#8216;roo[s-u]&#8217;<br>&#8216;roo[1-3]&#8217;</td><td>root,roos,roou<br>root,roos,roou<br>roo1,roo2,roo3</td></tr><tr><td>&#8216;roo[^abc]&#8217;</td><td>&#8216;roo[^abc]&#8217;</td><td>root,rood,rooe,roof</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる正規表現一覧</figcaption></figure>



<h2 class="wp-block-heading">正規表現の文字の繰り返しを示すメタ文字</h2>



<h3 class="wp-block-heading">正規表現の文字の繰り返しを示すメタ文字</h3>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>*</td><td>*</td><td>直前の文字の0回以上の繰り返し</td></tr><tr><td>無し</td><td>+</td><td>直前の文字の1回以上の繰り返し</td></tr><tr><td>無し</td><td>?</td><td>直前の文字の0回もしくは1回の繰り返し</td></tr><tr><td>\{m\}</td><td>{m}</td><td>直前の文字のm回の繰り返し</td></tr><tr><td>\{m,\}</td><td>{m,}</td><td>直前の文字のm回以上の繰り返し</td></tr><tr><td>\{m,n\}</td><td>{m,n}</td><td>直前の文字のm回以上n回以下の繰り返し</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる繰り返しの正規表現一覧</figcaption></figure>



<h3 class="wp-block-heading">実際に繰り返しのメタ文字使用例</h3>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>&#8216;roo*t&#8217;</td><td>&#8216;roo*t&#8217;</td><td>rot,root,rooot,rooota,roootab</td></tr><tr><td>無し</td><td>&#8216;roo+t&#8217;</td><td>root,rooot,rooota,roootab</td></tr><tr><td>無し</td><td>&#8216;roo?t&#8217;</td><td>rot,root,roota,rootab</td></tr><tr><td>&#8216;ro\{2\}t&#8217;</td><td>&#8216;ro{2}t&#8217;</td><td>root,roota,rootab</td></tr><tr><td>&#8216;ro\{1,\}t&#8217;</td><td>&#8216;ro{1,}t&#8217;</td><td>rot,root,rooot,rooota,roootab</td></tr><tr><td>&#8216;ro\{1,2\}t&#8217;</td><td>&#8216;ro{1,2}t&#8217;</td><td>rot,root,roota,rootab</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる繰り返しの正規表現一覧</figcaption></figure>



<h2 class="wp-block-heading">正規表現の補助的なメタ文字</h2>



<h3 class="wp-block-heading">正規表現の補助的なメタ文字</h3>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>\</td><td>\</td><td>直後のメタ文字を普通の文字として扱う</td></tr><tr><td>\(\)</td><td>()</td><td>指定する文字列をクループ化する</td></tr><tr><td>無し</td><td>|</td><td>複数の正規表現をORで繋げる</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる補助的正規表現一覧</figcaption></figure>



<h3 class="wp-block-heading">実際の補助的メタ文字の使用例</h3>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>&#8216;ro\\{2\\}t&#8217;</td><td>&#8216;ro\\{2\\}t&#8217;</td><td>ro\{2\}t,ro\{2\}ta,ro\{2\}tab,</td></tr><tr><td>&#8216;a\(bc\){2}&#8217;</td><td>&#8216;a(bc){2}&#8217;</td><td>abcbc,abcbca,abcbcac</td></tr><tr><td>無し</td><td>&#8216;abc|123&#8217;</td><td>123,abc,123a,abc1</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる補助的正規表現一覧</figcaption></figure>



<h2 class="wp-block-heading">正規表現をシェルスクリプトで使用した詳細結果</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="632" src="https://sugublog.org/wp-content/uploads/2021/11/programing_1122-3-1024x632.jpg" alt="コード" class="wp-image-4560" srcset="https://sugublog.org/wp-content/uploads/2021/11/programing_1122-3-1024x632.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/programing_1122-3-300x185.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/programing_1122-3-768x474.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/programing_1122-3.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>それぞれ実際にシェルスクリプトで実行した結果については以下の記事で詳細にまとめております。</p>



<p><span class="swl-bg-color has-swl-deep-01-background-color">シェルスクリプトの「文字検索」</span>で使用される<strong><span class="swl-inline-color has-swl-deep-01-color">「grep」</span></strong>コマンド結果</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-300x250.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shellscript-grep/">【シェルスクリプト】grepで文字列を抽出する方法！正規表現も使用します</a>
						<span class="p-blogCard__excerpt">Linuxでシェルスクリプトのgrepのやり方がよくわかりません。オプションや正規表現を使用した文字列抽出を行いたいです。 そういった声が多いので今回はシェルスクリプ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p><span class="swl-bg-color has-swl-deep-02-background-color">シェルスクリプトの「置換」</span>で使用される<strong><span class="swl-inline-color has-swl-deep-02-color">「sed」</span></strong>コマンド実行結果</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/11/programing_1122-4-300x164.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shellscript-sed/">【シェルスクリプト】sedで置換する方法！変数や正規表現も使用する</a>
						<span class="p-blogCard__excerpt">シェルスクリプトでよく使うものに置換があります。「sed s」コマンドを使用しますが、書き方など難しいと思った事はないでしょうか？ 記述の仕方が難しいのでとっつき&#8230;</span>					</div>
				</div>
			</div>
		</div>]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shellscript-regular-expression/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】sedで置換する方法！変数や正規表現も使用する</title>
		<link>https://sugublog.org/shellscript-sed/</link>
					<comments>https://sugublog.org/shellscript-sed/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Mon, 11 Mar 2024 16:34:49 +0000</pubDate>
				<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[shellscript]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6506</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/11/programing_1122-4-1024x560.jpg" class="webfeedsFeaturedVisual" /></p>シェルスクリプトでよく使うものに置換があります。「sed s」コマンドを使用しますが、書き方など難しいと思った事はないでしょうか？ 記述の仕方が難しいのでとっつきにくく、今まで置換を避けてきたエンジニアの方も多いです。  [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/11/programing_1122-4-1024x560.jpg" class="webfeedsFeaturedVisual" /></p>
<p>シェルスクリプトでよく使うものに<strong><span class="swl-inline-color has-swl-deep-01-color">置換</span></strong>があります。<strong><span class="swl-inline-color has-swl-deep-01-color">「sed s」コマンド</span></strong>を使用しますが、書き方など難しいと思った事はないでしょうか？</p>



<p>記述の仕方が難しいのでとっつきにくく、今まで置換を避けてきたエンジニアの方も多いです。</p>



<p>そこで今回は現役エンジニアの筆者が<span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">sedの置換について例文付きでわかりやすく</span></strong>ご説明いたします。</span></p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">変数や正規表現を使用しての置換</span></strong>などよく出てくるので、ここでやり方を抑えておきたいです。</p>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトのsedで置換する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="620" src="https://sugublog.org/wp-content/uploads/2021/07/PC007-8-1024x620.jpg" alt="置換" class="wp-image-3717" srcset="https://sugublog.org/wp-content/uploads/2021/07/PC007-8-1024x620.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/07/PC007-8-300x182.jpg 300w, https://sugublog.org/wp-content/uploads/2021/07/PC007-8-768x465.jpg 768w, https://sugublog.org/wp-content/uploads/2021/07/PC007-8.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトで置換のsedの使い方の基礎</span></strong>は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/置き換え前/置き換え後/フラグ&#39; ファイル名</code></pre></div>



<h3 class="wp-block-heading">sedで置換する基礎</h3>



<p><strong>置換のコマンド</strong>は<strong><span class="swl-inline-color has-swl-deep-01-color">「sed s」</span></strong>コマンドとして覚えておきましょう！</p>



<p>/置換したい文字列/置換後の文字列/で指定します。</p>



<p>フラグは以下の2点を覚えておきましょう！<span class="swl-marker mark_green">2つ同時に指定する事もできます。</span></p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>置換sedのフラグ２つ</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>g・・・全ての文字列が対象</li>



<li>i・・・大文字小文字を区別しない</li>
</ul>
</div></div>



<p>フラグは何も指定しなければ<span class="swl-marker mark_yellow">各行の最初にマッチした文字列しか置換されません。</span><span class="swl-marker mark_orange">全部置換したい時は「g」フラグを指定しましょう！</span></p>



<p>「i」フラグは大文字小文字を区別しなくなります。</p>



<h3 class="wp-block-heading">実際にsedで置換してみる</h3>



<p>では実際のシェルスクリプトで置換してみます。まずは置換前のファイルを表示します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>head -n 3 /etc/passwd</code></pre></div>



<p class="is-style-icon_book">「head -n 3」は頭から3行まで表示するコマンドです。</p>



<p>このシェルスクリプトを実行します。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-2-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-execution/">【シェルスクリプト基礎】コマンドを実行する様々な方法をご紹介！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトを実行する時に困った事はありませんか？ シェルスクリプトのコマンド実行での失敗メッセージ一覧 「実行権限がありません」 「コマンドが見つかりませ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p>sedでこのファイルの「:」を空白に置換してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed s/://g /etc/passwd | head -n 3</code></pre></div>



<p>「/etc/passwd」の全ての「:」を空白に置換するシェルスクリプトです。実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>rootx00root/root/bin/bash
binx11bin/bin/sbin/nologin
daemonx22daemon/sbin/sbin/nologin</code></pre></div>



<p class="has-border -border01">全ての「:」が空白に置換されています。</p>



<h2 class="wp-block-heading">シェルスクリプトのsedで指定した行を対象に置換する方法</h2>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">置換対象の行数を指定</span></strong>したい場合もあると思います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;行数s/置き換え前/置き換え後/フラグ&#39; ファイル名</code></pre></div>



<p>「s」の前に数字を付ける事で、対象行数を指定できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed 2s/://g /etc/passwd | head -n 3</code></pre></div>



<p>対象を2行目だけにしています。シェルスクリプトを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
binx11bin/bin/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p class="has-border -border01"><strong><span class="swl-inline-color has-swl-deep-01-color">2行目</span></strong>の「:」だけが空白に<span class="swl-inline-color has-swl-deep-01-color">置換</span>されています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;2,5s/://g&#39; /etc/passwd | head -n 7</code></pre></div>



<p>2行目から5行目まで範囲指定したい場合は、「s」の前に「始まりの行数,終わりの行数」として指定できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
binx11bin/bin/sbin/nologin
daemonx22daemon/sbin/sbin/nologin
admx34adm/var/adm/sbin/nologin
lpx47lp/var/spool/lpd/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown</code></pre></div>



<p class="has-border -border01"><span class="swl-inline-color has-swl-deep-01-color">2行目から5行目まで</span>の「:」だけが空白に<span class="swl-inline-color has-swl-deep-01-color">置換</span>されています。</p>



<h2 class="wp-block-heading">sedのフラグの使い方</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="682" src="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-1024x682.jpg" alt="フラグ" class="wp-image-4502" srcset="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-1024x682.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-768x511.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>setで置換する時の基礎は以下でした。フラグを試していきましょう！</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/置き換え前/置き換え後/フラグ&#39; ファイル名</code></pre></div>



<p>フラグは以下の2点を覚えておきましょう！2つ同時に指定する事も可能。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>置換sedのフラグ２つ</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>g・・・全ての文字列が対象</li>



<li>i・・・大文字小文字を区別しない</li>
</ul>
</div></div>



<h3 class="wp-block-heading">置換sedの「g」フラグを試す</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed s/:// /etc/passwd | head -n 3</code></pre></div>



<p>フラグは何も指定しなければ<span class="swl-marker mark_yellow">各行の最初にマッチした文字列しか置換されません。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>rootx:0:0:root:/root:/bin/bash
binx:1:1:bin:/bin:/sbin/nologin
daemonx:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">各行の初めの「:」だけが空白に置換されています。</p>



<p><span class="swl-marker mark_orange">「g」フラグをつけると行の先頭から末尾まで複数マッチした場合でも対象になります。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/://g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>シェルスクリプトを実行して確認します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>rootx00root/root/bin/bash
binx11bin/bin/sbin/nologin
daemonx22daemon/sbin/sbin/nologin</code></pre></div>



<p class="has-border -border01">各行全ての「:」が空白に置換されています。</p>



<h3 class="wp-block-heading">置換sedの「i」フラグを試す</h3>



<p>「i」フラグは<span class="swl-marker mark_orange">大文字小文字を区別しなくなります。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/Root/user1/i&#39; /etc/passwd | head -n 3</code></pre></div>



<p>「Root」と「root」で大文字小文字が区別されない時しか置換できません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>user1:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">各行で<span class="swl-inline-color has-swl-deep-01-color">初めの「root」の文字列</span>が「user1」に置換されています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/Root/user1/gi&#39; /etc/passwd | head -n 3</code></pre></div>



<p>「g」と「i」フラグを両方つけて実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>user1:x:0:0:user1:/user1:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p>各行の<span class="swl-inline-color has-swl-deep-01-color">すべての「root」</span>が「user1」に置換されました。</p>



<h2 class="wp-block-heading">sedのエスケープシークエンスの使い方</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="444" src="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-7-1024x444.jpg" alt="エスケープシークエンス" class="wp-image-4503" srcset="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-7-1024x444.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-7-300x130.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-7-768x333.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-7.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">「\」（バックスラッシュ）を使用してエスケープする</h3>



<p><span class="swl-marker mark_orange"><span class="swl-inline-color has-swl-deep-01-color">エスケープシークエンス</span>とは特別な文字列の効果を消して、普通の文字として扱う事が出来る文字です。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/://g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>「/etc/passwd」の「/」を「☆」に置換したいですが、sedでは「/」は特別な意味を持つ文字です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/\//☆/g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>変更前の「/」は区切りを表す特別な意味のある文字なので、その前に「\」（バックスラッシュ）をつけて効果を打ち消します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:☆root:☆bin☆bash
bin:x:1:1:bin:☆bin:☆sbin☆nologin
daemon:x:2:2:daemon:☆sbin:☆sbin☆nologin</code></pre></div>



<p class="has-border -border01">特別な意味を持つ「/」が普通の文字として扱われて、☆に置換されました。</p>



<h3 class="wp-block-heading">区切り文字を変更する</h3>



<p>「/」を<span class="swl-inline-color has-swl-deep-01-color">区切り文字</span>として扱っていましたが、<span class="swl-marker mark_orange">「%」や「!」で置き換えても大丈夫です。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s%/%☆%g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>区切り文字を「%」にして実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:☆root:☆bin☆bash
bin:x:1:1:bin:☆bin:☆sbin☆nologin
daemon:x:2:2:daemon:☆sbin:☆sbin☆nologin</code></pre></div>



<p class="has-border -border01">普通に「/」が「☆」に置換されました。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s!/!☆!g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>同じく「!」を区切り文字にしているパターンです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:☆root:☆bin☆bash
bin:x:1:1:bin:☆bin:☆sbin☆nologin
daemon:x:2:2:daemon:☆sbin:☆sbin☆nologin</code></pre></div>



<p class="has-border -border01">同じく普通に「/」が「☆」に置換されました。</p>



<h2 class="wp-block-heading">sedのオプションの効果</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="717" src="https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-1-1024x717.jpg" alt="オプション" class="wp-image-4270" srcset="https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-1-1024x717.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-1-300x210.jpg 300w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-1-768x538.jpg 768w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">sedで使用できるオプション</span></strong>をまとめます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>sedで使用できるオプション3選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>-r　・・・拡張正規表現を使用する</li>



<li>-e　・・・複数の条件を指定する</li>



<li>-i　・・・ファイルを編集して上書きする</li>
</ul>
</div></div>



<h3 class="wp-block-heading">拡張正規表現を使用する「-r」オプション</h3>



<p class="is-style-icon_book">正規表現については後述します。</p>



<h3 class="wp-block-heading">複数の条件を指定する「-e」オプション</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">複数の置換条件</span>がある場合に使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed -e &#39;s/root/user1/g&#39; -e &#39;s/://g&#39;  -e &#39;s/\///g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>「root」を「user1」に、「:」を空白に、「/」を空白に置換するシェルスクリプトです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>user1x00user1user1binbash
binx11binbinsbinnologin
daemonx22daemonsbinsbinnologin</code></pre></div>



<p class="has-border -border01">「root」が「user1」に、「:」と「/」が空白に置換されています。</p>



<h3 class="wp-block-heading">ファイルを編集して上書きする「-i」オプション</h3>



<p>今までは標準出力に表示していただけで、<span class="swl-marker mark_yellow">ファイル自体の保存はできません。</span>「-i」オプションを使用すれば<span class="swl-bg-color has-swl-deep-01-background-color">ファイル自体を上書き保存できます。</span></p>



<p>シェルスクリプトと同階層に「sed_test.txt」があり内容が以下とします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="sed_test.txt"><code>root:x:0:0:root:/root:/bin/bash</code></pre></div>



<p>このファイルの文字列を置換して上書き保存します。元のファイルをバックアップする事も可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed -i -e &#39;s/root/user1/g&#39; -e &#39;s/://g&#39; sed_test.txt</code></pre></div>



<p>「root」を「user1」に、「:」を空白に置換して上書き保存します。<span class="swl-bg-color has-swl-deep-01-background-color">※バックアップはとりません。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="sed_test.txt"><code>user1x00user1/user1/bin/bash</code></pre></div>



<p class="has-border -border01">「sed_test.txt」の内容を見ると上のようになっており、<span class="swl-inline-color has-swl-deep-01-color">置換して上書き保存</span>されています。</p>



<p>先程のコマンドではなく以下のように<span class="swl-marker mark_orange">「-i」オプションの後すぐに名前を指定すれば<span class="swl-inline-color has-swl-deep-01-color">バックアップ出来ます。</span></span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed -i.bk -e &#39;s/root/user1/g&#39; -e &#39;s/://g&#39; sed_test.txt</code></pre></div>



<p>このシェルスクリプトを実行すると、同階層に「sed_test.txt」と「sed_test.txt.bk」ができています。それぞれの中身をみてみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="sed_test.txt"><code>user1x00user1/user1/bin/bash</code></pre></div>



<p>「sed_test.txt」は置換されています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="sed_test.txt.bk"><code>root:x:0:0:root:/root:/bin/bash</code></pre></div>



<p><span class="swl-marker mark_green">「sed_test.txt.bk」は置換前のファイルの内容になっていて、<span class="swl-bg-color has-swl-deep-03-background-color">バックアップがとれています。</span></span></p>



<h2 class="wp-block-heading">sedで変数を使用して置換する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="666" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-11-1024x666.jpg" alt="スクリプト" class="wp-image-3868" srcset="https://sugublog.org/wp-content/uploads/2021/08/script_0809-11-1024x666.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-11-300x195.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-11-768x499.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-11.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">変数を使用して置換する方法</span></strong>も見ておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>moji=bin
sed &quot;s/$moji/hensu/g&quot; /etc/passwd | head -n 2</code></pre></div>



<p>変数に値を入れています。sedの検索文字列に変数参照の「$変数」を入れて置換します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/hensu/bash
hensu:x:1:1:hensu:/hensu:/shensu/nologin</code></pre></div>



<p class="has-border -border01">変数の「bin」の箇所が「hensu」に置換されています。</p>



<h3 class="wp-block-heading">sedで変数を使用してエラーが出る時</h3>



<p class="is-style-big_icon_caution">変数で置換しようとして上手くいかない場合があります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/$moji/hensu/g&#39; /etc/passwd | head -n 2</code></pre></div>



<p>このシェルスクリプトを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin</code></pre></div>



<p>変数の文字列の「bin」が置換されていません。</p>



<p class="has-border -border02">原因は「&#8221;」ではなく「&#8217;」で囲っている為です。変数参照する時は「&#8221;」でなくては展開できません。</p>



<h2 class="wp-block-heading">sedで正規表現を使用して置換する方法</h2>



<div class="wp-block-cover aligncenter"><span aria-hidden="true" class="wp-block-cover__background has-background-dim"></span><img decoding="async" width="1024" height="576" class="wp-block-cover__image-background wp-image-4184" alt="code" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-1024x576.jpg" data-object-fit="cover" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size"></p>



<p class="has-text-align-center"><span class="swl-fz u-fz-xl">シェルスクリプトでsedの正規表現</span></p>
</div></div>



<p><span class="swl-marker mark_orange"><strong>シェルスクリプト</strong>で<strong>正規表現</strong>をよく使用するものに<strong>文字列検索する「grep」</strong>と<strong><span class="swl-inline-color has-swl-deep-01-color">置換する「sed」</span></strong>があります。</span></p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-300x250.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shellscript-grep/">【シェルスクリプト】grepで文字列を抽出する方法！正規表現も使用します</a>
						<span class="p-blogCard__excerpt">Linuxでシェルスクリプトのgrepのやり方がよくわかりません。オプションや正規表現を使用した文字列抽出を行いたいです。 そういった声が多いので今回はシェルスクリプ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">sedでの正規表現</span></strong>についてまとめます。正規表現には基本正規表現と拡張正規表現があります。</p>



<p class="is-style-big_icon_point">基本的には<strong>拡張正規表現</strong>を使用していれば問題ありません。</p>



<p>正規表現で文字列を指定する<strong><span class="swl-inline-color has-swl-deep-01-color">特別な文字をメタ文字</span></strong>と言います。メタ文字がキーとなります。メタ文字とその効果をまとめます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>シェルスクリプトのsedで使用するメタ文字の種類</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>文字を指定するメタ文字</li>



<li>繰り返しを意味するメタ文字</li>



<li>補助的メタ文字</li>
</ul>
</div></div>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>.</td><td>.</td><td>何かしらの1文字</td></tr><tr><td>^</td><td>^</td><td>最初の文字</td></tr><tr><td>$</td><td>$</td><td>最後の文字</td></tr><tr><td>[]</td><td>[]</td><td>限定文字指定</td></tr><tr><td>[^]</td><td>[^]</td><td>限定文字以外</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる正規表現一覧</figcaption></figure>



<h3 class="wp-block-heading">何かしらの文字列を表す「.」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">何かしらの文字列を表す「.」を使用します</span>。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/roo./user1/g&#39; /etc/passwd | head -n 3</code></pre></div>



<p class="is-style-icon_book">「| head -n 3」はsedの結果の頭３行のみを抽出するコマンドです。</p>



<p>指定したファイルの中に「roo」と何らかの1文字の文字列があれば「user1」に置換します。</p>



<p class="is-style-big_icon_point">「&#8217;」で文字列を囲わなくても抽出できますが、エラーになる指定の仕方もあるので、全て「&#8217;」で囲う事を推奨します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>user1:x:0:0:user1:/user1:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「roo」と何らかの文字の「t」が結合された「root」が置換られました。</p>



<h3 class="wp-block-heading">最初の文字列を指定するには「^」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">最初の文字列を指定する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/^root/user1/g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>指定したファイルの中で行の初めの「root」のみを「user1」に置換します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>user1:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">行の初めの「root」のみが「user1」に置換されました。</p>



<h3 class="wp-block-heading">最後の文字を指定するには「$」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">最後の文字を指定する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/nologin$/user1/g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>指定したファイルの中で行の終わりの「nologin」のみを置換します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/user1
daemon:x:2:2:daemon:/sbin:/sbin/user1</code></pre></div>



<p class="has-border -border01">行終わりの「nologin」のみ「user1」に置換されました。</p>



<h3 class="wp-block-heading">限定文字を指定するには[]を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">限定文字を指定する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/roo[stu]/user1/g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>指定したファイルの中で「roo」とあと「s」か「t」か「u」かで組み合わせる文字列があれば置換します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>user1:x:0:0:user1:/user1:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「root」が「user1」に置換られました。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/roo[s-u]/user1/g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>続き文字列であれば上のように指定もできます。数字であれば[1-3]のようにも指定できます。</p>



<h3 class="wp-block-heading">限定文字以外を指定するには[^]を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">限定文字以外を指定する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sed &#39;s/roo[^abc]/shellscript/g&#39; /etc/passwd | head -n 3</code></pre></div>



<p>指定したファイルの中で「roo」とあと「a」か「b」か「c」<span class="swl-inline-color has-swl-deep-01-color">以外</span>の文字で組み合わせる文字列があれば置換します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「root」が「shellscript」に置換されました。</p>



<p class="is-style-icon_info">次は繰り返しのメタ文字をまとめます。</p>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>*</td><td>*</td><td>直前の文字の0回以上の繰り返し</td></tr><tr><td>無し</td><td>+</td><td>直前の文字の1回以上の繰り返し</td></tr><tr><td>無し</td><td>?</td><td>直前の文字の0回もしくは1回の繰り返し</td></tr><tr><td>\{m\}</td><td>{m}</td><td>直前の文字のm回の繰り返し</td></tr><tr><td>\{m,\}</td><td>{m,}</td><td>直前の文字のm回以上の繰り返し</td></tr><tr><td>\{m,n\}</td><td>{m,n}</td><td>直前の文字のm回以上n回以下の繰り返し</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる繰り返しの正規表現一覧</figcaption></figure>



<h3 class="wp-block-heading">直前の文字の0回以上の繰り返しするには「*」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の0回以上の繰り返しする</span>場合です。拡張正規表現の場合は「-r」オプションを使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
sed &#39;s/roo*t/shellscript/g&#39; /etc/passwd | head -n 2
echo 拡張正規表現
sed -r &#39;s/roo*t/shellscript/g&#39; /etc/passwd | head -n 2</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の０回以上の繰り返しがあり、その後に「t」が来る文字列を置換します。「rot」や「root」や「rooot」などが置換されます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
拡張正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">どちらも「root」が「shellscript」に置換されました。</p>



<p class="is-style-icon_announce">基本か拡張かであれば、拡張の方を使用する事を推奨します。</p>



<h3 class="wp-block-heading">直前の文字の1回以上の繰り返しするには「+」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の1回以上の繰り返しする</span>場合です。拡張正規表現のみ使用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
sed &#39;s/roo+t/shellscript/g&#39; /etc/passwd | head -n 2
echo 拡張正規表現
sed -r &#39;s/roo+t/shellscript/g&#39; /etc/passwd | head -n 2</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の1回以上の繰り返しがあり、その後に「t」が来る文字列を置換します。「root」や「rooot」などが置換されます。今回「rot」などは対象外です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
拡張正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">基本正規表現は対応していないので置換されず、拡張の方は「root」が「shellscript」に置換されました。</p>



<h3 class="wp-block-heading">直前の文字の0回もしくは1回の繰り返しするには「?」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の0回もしくは1回の繰り返しする</span>場合です。拡張正規表現のみ使用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
sed &#39;s/ro?t/shellscript/g&#39; /etc/passwd | head -n 2
echo 拡張正規表現１
sed -r &#39;s/ro?t/shellscript/g&#39; /etc/passwd | head -n 2
echo 拡張正規表現２
sed -r &#39;s/roo?t/shellscript/g&#39; /etc/passwd | head -n 2
echo 拡張正規表現３
sed -r &#39;s/rooo?t/shellscript/g&#39; /etc/passwd | head -n 2</code></pre></div>



<p>指定したファイルの中で「r」、「ro」、「roo」とその後に「o」の０回か1回の繰り返しがあり、その後に「t」が来る文字列を置換してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
拡張正規表現１
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
拡張正規表現２
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
拡張正規表現３
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin</code></pre></div>



<p>拡張１は「rt」と「rot」、拡張２は「rot」と「root」、拡張３は「root」と「rooot」が抽出されます。</p>



<p class="has-border -border01">基本正規表現は対応していないので置換されず、拡張１は「rt」や「rot」がないので置換されず、拡張2と3は「root」が「shellscript」に置換されました。</p>



<h3 class="wp-block-heading">直前の文字のm回の繰り返しするには{m}を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の繰り返し回数を指定する</span>場合です。基本正規表現を使用したい場合は「｛」や「｝」の前に「\」を付けます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
sed &#39;s/ro\{2\}t/shellscript/g&#39; /etc/passwd | head -n 2
echo 拡張正規表現
sed -r &#39;s/ro{2}t/shellscript/g&#39; /etc/passwd | head -n 2</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の2回のみの繰り返しがあり、その後に「t」が来る文字列を置換します。「root」が置換されます。「rooot」や「roooot」などは対象外です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
拡張正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">どちらも「root」が「shellscript」に置換されました。</p>



<h3 class="wp-block-heading">直前の文字のm回以上の繰り返しするには{m,}を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の繰り返し回数以上を指定する</span>場合です。基本正規表現を使用したい場合は「｛」や「｝」の前に「\」を付けます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
sed &#39;s/ro\{2,\}t/shellscript/g&#39; /etc/passwd | head -n 2
echo 拡張正規表現
sed -r &#39;s/ro{2,}t/shellscript/g&#39; /etc/passwd | head -n 2</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の2回以上の繰り返しがあり、その後に「t」が来る文字列を置換します。「root」や「rooot」や「roooot」などが置換されます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
拡張正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">どちらも「root」が「「shellscript」に置換されました。</p>



<h3 class="wp-block-heading">直前の文字のm回以上n回以下の繰り返しするには{m,n}を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の繰り返し回数以上と以下を指定する</span>場合です。基本正規表現を使用したい場合は「｛」や「｝」の前に「\」を付けます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
sed &#39;s/ro\{2,3\}t/shellscript/g&#39; /etc/passwd | head -n 2
echo 拡張正規表現
sed -r &#39;s/ro{2,3}t/shellscript/g&#39; /etc/passwd | head -n 2</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の2回以上3回以下の繰り返しがあり、その後に「t」が来る文字列を置換します。「root」や「rooot」が置換されます。「roooot」などは対象外です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
拡張正規表現
shellscript:x:0:0:shellscript:/shellscript:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin</code></pre></div>



<p class="has-border -border01">どちらも「root」が「shellscript」に置換されました。</p>



<p class="is-style-icon_announce">最後に補助的なメタ文字をご紹介します。</p>



<p>文字列指定の補助的なメタ文字をまとめます。</p>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>\</td><td>\</td><td>直後のメタ文字を普通の文字として扱う</td></tr><tr><td>\(\)</td><td>()</td><td>指定する文字列をクループ化する</td></tr><tr><td>無し</td><td>|</td><td>複数の正規表現をORで繋げる</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる補助的正規表現一覧</figcaption></figure>



<p>補助的なメタ文字を試すにあたり環境を説明します。シェルスクリプトと同階層に「6_sed」というディレクトリがあり、その配下に「sed_test.txt」があるとします。</p>



<p>「sed_test2.txt」の内容は以下とします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="grep_test.txt"><code>ro\{2\}t
root
abcc
abcbc
abcbcbc
123
12323
1232323
123123123
12333
abcabcabc</code></pre></div>



<h3 class="wp-block-heading">直後のメタ文字を普通の文字として扱うには「\」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直後のメタ文字を普通の文字として扱う</span>場合です。基本正規表現と拡張正規表現とどちらも使用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現１　繰り返し
sed &#39;s/ro\{2\}t/shellscript/g&#39; 6_sed/sed_test2.txt | head -n 2

echo 基本正規表現２　直後のメタ文字を普通の文字として扱う
sed &#39;s/ro\\{2\\}t/shellscript/g&#39; 6_sed/sed_test2.txt | head -n 2

echo 拡張正規表現１　変化なし
sed -r &#39;s/ro\{2\}t/shellscript/g&#39; 6_sed/sed_test2.txt | head -n 2

echo 拡張正規表現２　直後のメタ文字を普通の文字として扱う
sed -r &#39;s/ro\\\{2\\\}t/shellscript/g&#39; 6_sed/sed_test2.txt | head -n 2</code></pre></div>



<p>指定したファイルの中で「ro\{2\}t」という文字列を置換したいです。しかし「ro\{2\}t」は繰り返しで出てきたoを2回繰り返すメタ文字で「root」が置き換わります。</p>



<p>このままでは「root」が抽出されるので「\」を「\」で普通の文字列にエスケープします。<span class="swl-marker mark_orange">これで「ro\{2\}t」という文字列が置換できます。</span></p>



<p>拡張正規表現においては「ro\{2\}t」の「\」はメタ文字と解釈されているので変化なしで置換されません。</p>



<p>「ro\{2\}t」の「\」と「{」と「}」を「\」で普通の文字列にエスケープします。<span class="swl-marker mark_orange">これで拡張正規表現の方も「ro\{2\}t」という文字列が置換できます。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現１　繰り返し
ro\{2\}t
shellscript
基本正規表現２　直後のメタ文字を普通の文字として扱う
shellscript
root
拡張正規表現１　変化なし
ro\{2\}t
root
拡張正規表現２　直後のメタ文字を普通の文字として扱う
shellscript
root</code></pre></div>



<p class="has-border -border01">基本正規表現は「ro\\{2\\}t」拡張正規表現は「ro\\\{2\\\}t」とすることで「ro\{2\}t」という文字列が「shellscript」に置換されました。</p>



<h3 class="wp-block-heading">指定する文字列をクループ化して扱うには()を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">指定する文字列をクループ化して扱う</span>場合です。基本正規表現と拡張正規表現とどちらも使用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現１　単体文字繰り返し
sed &#39;s/abc\{2\}/shellscript/g&#39; 6_sed/sed_test2.txt | head -n 5

echo 基本正規表現２　グループで繰り返し
sed &#39;s/a\(bc\)\{2\}/shellscript/g&#39; 6_sed/sed_test2.txt | head -n 5

echo 拡張正規表現１　単体文字繰り返し
sed -r &#39;s/abc{2}/shellscript/g&#39; 6_sed/sed_test2.txt | head -n 5

echo 拡張正規表現２　グループで繰り返し
sed -r &#39;s/a(bc){2}/shellscript/g&#39; 6_sed/sed_test2.txt | head -n 5</code></pre></div>



<p>基本正規表現１は指定したファイルの中で「abc」の一つ前の「c」を2回繰り返すというシェルスクリプトでした。しかし「bc」の繰り返しにしたい場合は、基本正規表現２のように<span class="swl-marker mark_orange">該当文字列を<span class="swl-inline-color has-swl-deep-01-color">\(\)</span>で囲いグループ化します。</span></p>



<p>拡張正規表現１も同様です。「bc」の繰り返しにしたい場合は、拡張正規表現２のように<span class="swl-marker mark_orange">該当文字列を<span class="swl-inline-color has-swl-deep-01-color">()</span>で囲いグループ化します。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現１　単体文字繰り返し
ro\{2\}t
root
shellscript
abcbc
abcbcbc
基本正規表現２　グループで繰り返し
ro\{2\}t
root
abcc
shellscript
shellscriptbc
拡張正規表現１　単体文字繰り返し
ro\{2\}t
root
shellscript
abcbc
abcbcbc
拡張正規表現２　グループで繰り返し
ro\{2\}t
root
abcc
shellscript
shellscriptbc</code></pre></div>



<p class="has-border -border01">どちらの１も「abcc」が、どちらの２も「abcbc」が「shellscript」に置換されました。</p>



<h3 class="wp-block-heading">複数の正規表現をORで繋げるには「|」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">複数の正規表現をORで繋げる</span>場合です。拡張正規表現しか対応していません。</p>



<p>指定したファイルの中で「abc」か「123」という文字列を置換したいです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 拡張正規表現１
sed -r &#39;s/abc|123/shellscript/g&#39; 6_sed/sed_test2.txt</code></pre></div>



<p>「abc|123」で可能です。シェルスクリプトを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>拡張正規表現１
ro\{2\}t
root
shellscriptc
shellscriptbc
shellscriptbcbc
shellscript
shellscript23
shellscript2323
shellscriptshellscriptshellscript
shellscript33
shellscriptshellscriptshellscript</code></pre></div>



<p class="has-border -border01">指定したファイルの中で「abc」か「123」という文字列をが「shellscript」に置換されました。</p>


<div class="wp-block-image is-style-border">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="512" src="https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2-1024x512.jpg" alt="training" class="wp-image-4542" srcset="https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2-1024x512.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2-300x150.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2-768x384.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<p>ではここで質問です。</p>



<p class="is-style-big_icon_hatena">したのシェルスクリプトを実行すると置換結果はどのようになるでしょうか？</p>



<dl class="swell-block-dl">
<dt class="swell-block-dl__dt">sed -r &#8216;s/abc|123{3}/shellscript/g&#8217; 6_sed/sed_test2.txt</dt>



<dd class="swell-block-dl__dd">
<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ro\{2\}t
root
shellscriptc
shellscriptbc
shellscriptbcbc
123
12323
1232323
123123123
shellscript
shellscriptshellscriptshellscript</code></pre></div>
</dd>



<dt class="swell-block-dl__dt">sed -r &#8216;s/abc|(123){3}/shellscript/g&#8217; 6_sed/sed_test2.txt</dt>



<dd class="swell-block-dl__dd">
<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ro\{2\}t
root
shellscriptc
shellscriptbc
shellscriptbcbc
123
12323
1232323
shellscript
12333
shellscriptshellscriptshellscript</code></pre></div>
</dd>



<dt class="swell-block-dl__dt">sed -r &#8216;s/(abc|123){3}/shellscript/g&#8217;  6_sed/sed_test2.txt</dt>



<dd class="swell-block-dl__dd">
<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ro\{2\}t
root
abcc
abcbc
abcbcbc
123
12323
1232323
shellscript
12333
shellscript</code></pre></div>
</dd>
</dl>


<div class="swell-block-balloon"><div class="c-balloon -bln-right" data-col="blue"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">管理人</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>シェルスクリプトのsedでの置換は非常によく使用するので、このページを何度も読んで是非マスターしてください。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shellscript-sed/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】grepで文字列を抽出する方法！正規表現も使用します</title>
		<link>https://sugublog.org/shellscript-grep/</link>
					<comments>https://sugublog.org/shellscript-grep/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Mon, 11 Mar 2024 06:46:20 +0000</pubDate>
				<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[grep]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6490</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-1024x853.jpg" class="webfeedsFeaturedVisual" /></p>Linuxでシェルスクリプトのgrepのやり方がよくわかりません。オプションや正規表現を使用した文字列抽出を行いたいです。 そういった声が多いので今回はシェルスクリプトのgrepについて教えます！ 現役エンジニアの筆者も [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-1024x853.jpg" class="webfeedsFeaturedVisual" /></p>
<p>Linuxで<span class="swl-marker mark_orange">シェルスクリプトの<strong><span class="swl-inline-color has-swl-deep-01-color">grep</span></strong></span>のやり方がよくわかりません。<span class="swl-marker mark_orange">オプションや正規表現を使用した文字列抽出</span>を行いたいです。</p>



<p>そういった声が多いので今回はシェルスクリプトのgrepについて教えます！</p>



<p>現役エンジニアの筆者もよく使用するので、実例などを用いて教示します。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">shellscriptのgrepを使用して文字列を抽出する方法</span></strong>はよく使います。<span class="swl-marker mark_orange">シェルスクリプトを使用するなら必須の項目</span>です。</p>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>
・・・・・



<h2 class="wp-block-heading">シェルスクリプトでgrepの使い方の基本</h2>



<div class="wp-block-cover aligncenter"><span aria-hidden="true" class="wp-block-cover__background has-background-dim"></span><img decoding="async" width="1024" height="576" class="wp-block-cover__image-background wp-image-4184" alt="code" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-1024x576.jpg" style="object-position:50% 50%" data-object-fit="cover" data-object-position="50% 50%" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size"></p>



<p class="has-text-align-center"><span class="swl-fz u-fz-xl"><strong>シェルスクリプトでgrepの使い方の基本</strong></span></p>
</div></div>



<p>シェルスクリプトでの<strong><span class="swl-inline-color has-swl-deep-01-color">grep</span></strong>は検索したい文字列を、指定したファイルから行全体を抽出します。</p>



<p>またデフォルトでは基本正規表現を使用するので、拡張正規表現を使用したい場合はオプションをつけます。</p>



<p class="is-style-icon_pen">正規表現、grepのオプションについては後の項目で学習します。</p>



<p class="is-style-icon_info">検索文字列は大文字小文字を区別します。</p>



<h3 class="wp-block-heading">grepの使い方の基本</h3>



<p>シェルスクリプトで<strong><span class="swl-inline-color has-swl-deep-01-color">grep</span></strong>の使い方の基本構文は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep 検索文字列 検索ファイル（パス付き）</code></pre></div>



<p><span class="swl-marker mark_orange">検索ファイルについては複数指定できます。</span>半角スペースを区切りにしてファイルを指定していきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep 検索文字列 検索ファイル1 検索ファイル2 . . .</code></pre></div>



<h3 class="wp-block-heading">実践：grepの基本</h3>



<p>では実際にgrepを使用して文字列を抽出してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep root /etc/passwd</code></pre></div>



<p>「root」という文字列を「/etc/passwd」のファイルから抽出しています。</p>



<p>このシェルスクリプトを実行してみます。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-2-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-execution/">【シェルスクリプト基礎】コマンドを実行する様々な方法をご紹介！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトを実行する時に困った事はありませんか？ シェルスクリプトのコマンド実行での失敗メッセージ一覧 「実行権限がありません」 「コマンドが見つかりませ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「/etc/passwd」のファイルで「root」が含まれる行全体が2行抽出されました。</p>



<p>今度は<span class="swl-bg-color has-swl-deep-01-background-color">検索するファイルを複数</span>にしてみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep root /etc/passwd /etc/group</code></pre></div>



<p>「root」という文字列を「/etc/passwd」と「/etc/group」のファイルから抽出しています。</p>



<p>このシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin
/etc/group:root:x:0:</code></pre></div>



<p class="has-border -border01">「/etc/passwd」と「/etc/group」で「root」が含まれる行全体が<span class="swl-inline-color has-swl-deep-01-color">ファイル名付き</span>で抽出されました。</p>



<p class="is-style-icon_info">複数のファイルを指定した場合は「ファイル名:対象の行」が表示されます。</p>



<h2 class="wp-block-heading">grepの検索オプションについて</h2>



<div class="wp-block-cover aligncenter"><span aria-hidden="true" class="wp-block-cover__background has-background-dim"></span><img decoding="async" width="1200" height="500" class="wp-block-cover__image-background wp-image-4803" alt="パソコン教室" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-9.jpg" data-object-fit="cover" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-9.jpg 1200w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-9-300x125.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-9-1024x427.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-9-768x320.jpg 768w" sizes="(max-width: 1200px) 100vw, 1200px" /><div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size"></p>



<p class="has-text-align-center"><span class="swl-fz u-fz-xl">シェルスクリプトでgrepのオプションについて</span></p>
</div></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">grepの検索オプション</span></strong>についてまとめます。</p>



<figure class="wp-block-table"><table><thead><tr><th>オプション</th><th>効果</th></tr></thead><tbody><tr><th>-E</th><td>拡張正規表現を使用</td></tr><tr><th>-F</th><td>正規表現を使用しない</td></tr><tr><th>-i</th><td>大文字小文字を区別しない</td></tr><tr><th>-e</th><td>検索文字列を指定する</td></tr><tr><th>-v</th><td>検索結果を反転させる</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトでgrepのオプション一覧</figcaption></figure>



<h3 class="wp-block-heading">拡張正規表現を使用したい時につけるのが「-E」オプションです。</h3>



<p>シェルスクリプトの基本でデフォルトは基本正規表現を使用すると説明しました。拡張正規表現を使用したい時につけるのが「-E」オプションです。</p>



<p class="is-style-icon_pen">正規表現を使用した検索は、後の項目で説明します。</p>



<h3 class="wp-block-heading">正規表現を使用したくない場合には「-F」オプションを使用します。</h3>



<p class="is-style-icon_pen">正規表現を使用した検索は、後の項目で説明します。</p>



<h3 class="wp-block-heading">検索文字列の大文字小文字を区別したくない場合は「-i」オプションを使用します。</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo オプションなし
grep Root /etc/passwd
echo オプションあり
grep -i Root /etc/passwd</code></pre></div>



<p>-iオプションを使用する時としない時のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>オプションなし
オプションあり
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">オプションなしの場合<span class="swl-marker mark_yellow">Rootの大文字小文字が区別される為、何も表示されません。</span>逆にオプションありの場合は<span class="swl-marker mark_orange">rootが含まれる行が表示</span>されました。</p>



<p class="is-style-icon_good">-iオプションで大文字小文字が区別されないので正解です。</p>



<h3 class="wp-block-heading">検索文字列を指定する場合は「-e」オプションを使います。主に検索文字列を複数指定したい場合に使用します。</h3>



<p>まず<span class="swl-bg-color has-swl-deep-01-background-color">エラーが出るシェルスクリプト</span>を実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep root postfix /etc/passwd</code></pre></div>



<p>例えば<span class="swl-marker mark_yellow">複数の文字列を含むものを抽出</span>したい時に、上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep: postfix: そのようなファイルやディレクトリはありません
/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="is-style-big_icon_batsu">上のような実行結果となりエラーが出ました。</p>



<p><span class="swl-bg-color has-swl-deep-01-background-color">エラーの原因</span>として「root」を含む文字列を「postfix」と「/etc/passwd」のファイルから抽出するシェルスクリプトと認識されているからです。</p>



<p>「postfix」というファイルがないとみなされエラーが出てきます。「/etc/passwd」には「root」があるので表示されています。</p>



<p class="is-style-icon_info">ファイル名も表示されているので、複数のファイルが指定されている動きなのがわかります。</p>



<p class="has-border -border02"><span class="swl-bg-color has-swl-deep-02-background-color">エラーの解決法</span>として-eオプションがあります。「postfix」は検索文字列と明示的に指定できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep -e root -e postfix /etc/passwd</code></pre></div>



<p>このシェルスクリプトのように検索文字列ごとに「-e」オプションを使います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「/etc/passwd」ファイルの中の「root」と「postfix」の文字列が含まれる行が表示されました。</p>



<p class="is-style-icon_info">ファイル名が表示されていないので、単体のファイルが指定されている動きなのがわかります。</p>



<p>指定した文字列が抽出されて、エラーが出ていないので成功です。</p>



<h3 class="wp-block-heading">指定した結果を反転させるには「-v」オプションを使用します。</h3>



<p>「/etc/passwd」から「root」が<span class="swl-marker mark_yellow">ない行を表示させるシェルスクリプト</span>です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep -v root /etc/passwd | head -n 5</code></pre></div>



<p class="is-style-icon_pen">「|」はgrepの結果を「|」の後のコマンドの引数にする事が出来るパイプというものです。「head -n 5」は頭から5行だけ表示するコマンドです。</p>



<p>「/etc/passwd」から「root」がない行は多いので５行だけ表示しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync</code></pre></div>



<p class="has-border -border01">「/etc/passwd」から「root」がない行の先頭５行だけ表示されました。</p>



<h2 class="wp-block-heading">grepの出力オプションについて</h2>



<div class="wp-block-cover aligncenter"><span aria-hidden="true" class="wp-block-cover__background has-background-dim"></span><img decoding="async" width="1024" height="576" class="wp-block-cover__image-background wp-image-4184" alt="code" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-1024x576.jpg" data-object-fit="cover" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size"></p>



<p class="has-text-align-center"><span class="swl-fz u-fz-xl">シェルスクリプトでgrepの出力オプションについて</span></p>
</div></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">grepの出力に関するオプション</span></strong>についてまとめます。</p>



<figure class="wp-block-table"><table><thead><tr><th>出力オプション</th><th>出力効果</th></tr></thead><tbody><tr><td>-n</td><td>抽出された行番号を表示</td></tr><tr><td>-H</td><td>抽出されたファイルの<span class="swl-inline-color has-swl-deep-01-color">ファイル名も表示する</span></td></tr><tr><td>-h</td><td>抽出されたファイルの<span class="swl-inline-color has-swl-deep-02-color">ファイル名は表示しない</span></td></tr><tr><td>-l</td><td>抽出されたファイルの<span class="swl-inline-color has-swl-deep-01-color">ファイル名のみ表示する</span></td></tr><tr><td>-L</td><td>抽出<span class="swl-inline-color has-swl-deep-02-color">されていない</span><span class="swl-inline-color has-swl-deep-01-color">ファイル名のみ表示する</span></td></tr><tr><td>-o</td><td><span class="swl-inline-color has-swl-deep-01-color">抽出された箇所のみ</span>表示する</td></tr><tr><td>-q</td><td>抽出された箇所を<span class="swl-inline-color has-swl-deep-02-color">表示しない</span></td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトでgrepの出力オプション一覧</figcaption></figure>



<h3 class="wp-block-heading">抽出された行番号を表示したい場合は「-n」オプションを使用します。</h3>



<p><span class="swl-marker mark_orange">抽出した文字列がファイルの何行目にあるかを表示したい</span>事はよくあります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep -n root /etc/passwd</code></pre></div>



<p>「/etc/passwd」から「root」がある行を行番号付きで表示します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">１行目と１０行目に「root」がある事がわかります。</p>



<h3 class="wp-block-heading">抽出されたファイルの<span class="swl-inline-color has-swl-deep-01-color">ファイル名も表示する</span>場合は「-H」オプションを使用します。</h3>



<p>抽出されたファイルの<span class="swl-inline-color has-swl-deep-01-color">ファイル名も表示</span>したい場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep -H root /etc/passwd</code></pre></div>



<p>「/etc/passwd」から「root」がある行をファイル名付きで表示します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/etc/passwd:root:x:0:0:root:/root:/bin/bash
/etc/passwd:operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「root」があるファイル名「/etc/passwd」付で行が表示されました。</p>



<h3 class="wp-block-heading">抽出されたファイルの<span class="swl-inline-color has-swl-deep-02-color">ファイル名は表示しない</span>場合は「-h」オプションを使用します。</h3>



<p>抽出されたファイルの<span class="swl-inline-color has-swl-deep-02-color">ファイル名は表示しない</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep -h root /etc/passwd /etc/group</code></pre></div>



<p>複数のファイルを指定すればファイル名が表示されますが、不要な場合に使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root:x:0:</code></pre></div>



<p class="has-border -border01">ファイル名が表示されていない事がわかります。</p>



<h3 class="wp-block-heading">抽出されたファイルの<span class="swl-inline-color has-swl-deep-01-color">ファイル名のみ表示する</span>場合は「-l」オプションを使用します。</h3>



<p>抽出されたファイルの<span class="swl-inline-color has-swl-deep-01-color">ファイル名のみ表示する</span>したい場合があります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep -l root /etc/passwd /etc/group</code></pre></div>



<p>「-l」オプションを使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/etc/passwd
/etc/group</code></pre></div>



<p class="has-border -border01">ファイル名のみ表示されている事がわかります。</p>



<h3 class="wp-block-heading">抽出<span class="swl-inline-color has-swl-deep-02-color">されていない</span><span class="swl-inline-color has-swl-deep-01-color">ファイル名のみ表示する</span>場合は「-L」オプションを使用します。</h3>



<p>抽出<span class="swl-inline-color has-swl-deep-02-color">されていない</span><span class="swl-inline-color has-swl-deep-01-color">ファイル名のみ表示する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep -L root /etc/passwd /etc/group /etc/nsswitch.conf</code></pre></div>



<p>指定した３ファイルの中で「root」が一つもないファイル名を表示するシェルスクリプトです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>/etc/nsswitch.conf</code></pre></div>



<p class="has-border -border01">「root」が一つもないファイル名のみ表示されている事がわかります。</p>



<h3 class="wp-block-heading"><span class="swl-inline-color has-swl-deep-01-color">抽出された箇所のみ</span>表示する場合は「-o」オプションを使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">抽出された箇所のみ</span>表示する場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo &#39;複数ファイルの場合&#39;
grep -o root /etc/passwd /etc/group
echo &#39;単体ファイルの場合&#39;
grep -o root /etc/passwd</code></pre></div>



<p>複数ファイルの場合と単体ファイルの場合で表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>複数ファイルの場合
/etc/passwd:root
/etc/passwd:root
/etc/passwd:root
/etc/passwd:root
/etc/group:root
単体ファイルの場合
root
root
root
root</code></pre></div>



<p class="has-border -border01">ファイルの中に「root」がある数だけ表示されている事がわかります。</p>



<p class="is-style-icon_announce">このシェルスクリプトは、後述する正規表現を含んだ検索で稀に使用します。</p>



<h3 class="wp-block-heading"><span class="swl-inline-color has-swl-deep-01-color">抽出された箇所を<span class="swl-inline-color has-swl-deep-02-color">表示しない</span></span>場合は「-q」オプションを使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">抽出された箇所を<span class="swl-inline-color has-swl-deep-02-color">表示しない</span></span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep -q root /etc/passwd /etc/group</code></pre></div>



<p>指定したファイルの中に「root」があってもなくても表示しないシェルスクリプトです。</p>



<p class="is-style-big_icon_point">実行しても特になにも表示されません。文字列が存在する時としない時の違いは終了ステータスの違いです。</p>



<p>文字列が１つでも存在すれば終了ステータスは「正常」、しなければ「異常」となります。</p>



<p class="is-style-icon_announce">文字列の存在可否だけが必要で、表示は不要な場合に使用されます。例えば「if」などの判定に「-q」オプションは使用します。</p>



<h2 class="wp-block-heading">grepで正規表現を使用する</h2>



<div class="wp-block-cover aligncenter"><span aria-hidden="true" class="wp-block-cover__background has-background-dim"></span><img decoding="async" width="1024" height="576" class="wp-block-cover__image-background wp-image-4184" alt="code" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-1024x576.jpg" data-object-fit="cover" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-4.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /><div class="wp-block-cover__inner-container is-layout-flow wp-block-cover-is-layout-flow">
<p class="has-text-align-center has-large-font-size"></p>



<p class="has-text-align-center"><span class="swl-fz u-fz-xl">シェルスクリプトでgrepの正規表現</span></p>
</div></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">grepでの正規表現</span></strong>についてまとめます。正規表現には基本正規表現と拡張正規表現があります。</p>



<p class="is-style-big_icon_point">基本的には<strong>拡張正規表現</strong>を使用していれば問題ありません。</p>



<p>正規表現で文字列を指定する<strong><span class="swl-inline-color has-swl-deep-01-color">特別な文字をメタ文字</span></strong>と言います。メタ文字がキーとなります。メタ文字とその効果をまとめます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>シェルスクリプトのgrepで使用するメタ文字の種類</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>文字を指定するメタ文字</li>



<li>繰り返しを意味するメタ文字</li>



<li>補助的メタ文字</li>
</ul>
</div></div>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>.</td><td>.</td><td>何かしらの1文字</td></tr><tr><td>^</td><td>^</td><td>最初の文字</td></tr><tr><td>$</td><td>$</td><td>最後の文字</td></tr><tr><td>[]</td><td>[]</td><td>限定文字指定</td></tr><tr><td>[^]</td><td>[^]</td><td>限定文字以外</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる正規表現一覧</figcaption></figure>



<h3 class="wp-block-heading">何かしらの文字列を抽出する場合は「.」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">何かしらの文字列を抽出する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep &#39;roo.&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中に「roo」と何らかの1文字の文字列があれば抽出します。</p>



<p class="is-style-big_icon_point">「&#8217;」で文字列を囲わなくても抽出できますが、エラーになる指定の仕方もあるので、全て「&#8217;」で囲う事を推奨します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「roo」と何らかの文字の「t」が結合された「root」が抽出されました。</p>



<h3 class="wp-block-heading">最初の文字列を指定するには「^」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">最初の文字列を指定する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep &#39;^root&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中で「root」から始まる行を抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash</code></pre></div>



<p class="has-border -border01">「root」から始まる行のみが抽出されました。</p>



<h3 class="wp-block-heading">最後の文字を指定するには「$」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">最後の文字を指定する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep &#39;nologin$&#39; /etc/passwd | head -n 3</code></pre></div>



<p>指定したファイルの中で「nologin」で終わる行を抽出します。</p>



<p class="is-style-icon_book">grepの基本で前述しましたが「| head -n 3」はgrepの結果の頭３行のみを抽出するコマンドです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「nologin」で終わる行のみが抽出されました。</p>



<h3 class="wp-block-heading">限定文字を指定するには[]を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">限定文字を指定する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep &#39;roo[stu]&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中で「roo」とあと「s」か「t」か「u」かで組み合わせる文字列があれば抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「root」が含まれる行が抽出されました。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep &#39;roo[s-u]&#39; /etc/passwd</code></pre></div>



<p>続き文字列であれば上のように指定もできます。数字であれば[1-3]のようにも指定できます。</p>



<h3 class="wp-block-heading">限定文字以外を指定するには[^]を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">限定文字以外を指定する</span>場合です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>grep &#39;roo[^abc]&#39; /etc/passwd </code></pre></div>



<p>指定したファイルの中で「roo」とあと「a」か「b」か「c」以外の文字で組み合わせる文字列があれば抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">「root」が含まれる行が抽出されました。</p>



<p class="is-style-icon_info">次は繰り返しのメタ文字をまとめます。</p>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>*</td><td>*</td><td>直前の文字の0回以上の繰り返し</td></tr><tr><td>無し</td><td>+</td><td>直前の文字の1回以上の繰り返し</td></tr><tr><td>無し</td><td>?</td><td>直前の文字の0回もしくは1回の繰り返し</td></tr><tr><td>\{m\}</td><td>{m}</td><td>直前の文字のm回の繰り返し</td></tr><tr><td>\{m,\}</td><td>{m,}</td><td>直前の文字のm回以上の繰り返し</td></tr><tr><td>\{m,n\}</td><td>{m,n}</td><td>直前の文字のm回以上n回以下の繰り返し</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる繰り返しの正規表現一覧</figcaption></figure>



<h3 class="wp-block-heading">直前の文字の0回以上の繰り返しするには「*」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の0回以上の繰り返しする</span>場合です。拡張正規表現の場合は「-E」オプションを使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
grep &#39;roo*t&#39; /etc/passwd
echo 拡張正規表現
grep -E &#39;roo*t&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の０回以上の繰り返しがあり、その後に「t」が来る文字列を抽出します。「rot」や「root」や「rooot」などが抽出されます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
拡張正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">どちらも「root」が含まれる行が抽出されました。</p>



<p class="is-style-icon_announce">基本か拡張かどちらを使用する方が良いかですが、拡張の方を使用する事を推奨します。</p>



<h3 class="wp-block-heading">直前の文字の1回以上の繰り返しするには「+」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の1回以上の繰り返しする</span>場合です。拡張正規表現のみ使用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
grep &#39;roo+t&#39; /etc/passwd
echo 拡張正規表現
grep -E &#39;roo+t&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の1回以上の繰り返しがあり、その後に「t」が来る文字列を抽出します。「root」や「rooot」などが抽出されます。今回「rot」などは非対象ですね。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
拡張正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">基本正規表現は対応していないので抽出されず、拡張の方は「root」が含まれる行が抽出されました。</p>



<h3 class="wp-block-heading">直前の文字の0回もしくは1回の繰り返しするには「?」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の0回もしくは1回の繰り返しする</span>場合です。拡張正規表現のみ使用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
grep &#39;ro?t&#39; /etc/passwd
echo 拡張正規表現１
grep -E &#39;ro?t&#39; /etc/passwd
echo 拡張正規表現２
grep -E &#39;roo?t&#39; /etc/passwd
echo 拡張正規表現３
grep -E &#39;rooo?t&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中で「r」、「ro」、「roo」とその後に「o」の０回か1回の繰り返しがあり、その後に「t」が来る文字列を抽出しまみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
拡張正規表現１
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
拡張正規表現２
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
拡張正規表現３
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p>拡張１は「rt」と「rot」、拡張２は「rot」と「root」、拡張３は「root」と「rooot」が抽出されます。</p>



<p class="has-border -border01">基本正規表現は対応していないので抽出されず、拡張１は「rt」が拡張2と3は「root」が含まれる行が抽出されました。</p>



<h3 class="wp-block-heading">直前の文字のm回の繰り返しするには{m}を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の繰り返し回数を指定する</span>場合です。基本正規表現を使用したい場合は「｛」や「｝」の前に「\」を付けます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
grep &#39;ro\{2\}t&#39; /etc/passwd
echo 拡張正規表現
grep -E &#39;ro{2}t&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の2回のみの繰り返しがあり、その後に「t」が来る文字列を抽出します。「root」が抽出されます。「rooot」や「roooot」などは非対象ですね。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
拡張正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">どちらも「root」が含まれる行が抽出されました。</p>



<h3 class="wp-block-heading">直前の文字のm回以上の繰り返しするには{m,}を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の繰り返し回数以上を指定する</span>場合です。基本正規表現を使用したい場合は「｛」や「｝」の前に「\」を付けます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
grep &#39;ro\{2,\}t&#39; /etc/passwd
echo 拡張正規表現
grep -E &#39;ro{2,}t&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の2回以上の繰り返しがあり、その後に「t」が来る文字列を抽出します。「root」や「rooot」や「roooot」などが抽出されます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
拡張正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">どちらも「root」が含まれる行が抽出されました。</p>



<h3 class="wp-block-heading">直前の文字のm回以上n回以下の繰り返しするには{m,n}を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直前の文字の繰り返し回数以上と以下を指定する</span>場合です。基本正規表現を使用したい場合は「｛」や「｝」の前に「\」を付けます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現
grep &#39;ro\{2,3\}t&#39; /etc/passwd
echo 拡張正規表現
grep -E &#39;ro{2,3}t&#39; /etc/passwd</code></pre></div>



<p>指定したファイルの中で「ro」とその後に「o」の2回以上3回以下の繰り返しがあり、その後に「t」が来る文字列を抽出します。「root」や「rooot」が抽出されます。「roooot」などは対象外ですね。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
拡張正規表現
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin</code></pre></div>



<p class="has-border -border01">どちらも「root」が含まれる行が抽出されました。</p>



<p class="is-style-icon_announce">最後に補助的なメタ文字をご紹介します。</p>



<p>文字列指定の補助的なメタ文字をまとめます。</p>



<figure class="wp-block-table"><table><thead><tr><th>基本正規表現メタ文字</th><th>拡張正規表現メタ文字</th><th>効果</th></tr></thead><tbody><tr><td>\</td><td>\</td><td>直後のメタ文字を普通の文字として扱う</td></tr><tr><td>\(\)</td><td>()</td><td>指定する文字列をクループ化する</td></tr><tr><td>無し</td><td>|</td><td>複数の正規表現をORで繋げる</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトで使用できる補助的正規表現一覧</figcaption></figure>



<p>補助的なメタ文字を試すにあたり環境を説明します。シェルスクリプトと同階層に「5_grep」というディレクトリがあり、その配下に「grep_test.txt」があるとします。</p>



<p>「grep_test.txt」の内容は以下とします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="grep_test.txt"><code>ro\{2\}t
root
abcc
abcbc
abcbcbc
123
12323
1232323
123123123
12333
abcabcabc</code></pre></div>



<h3 class="wp-block-heading">直後のメタ文字を普通の文字として扱うには「\」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">直後のメタ文字を普通の文字として扱う</span>場合です。基本正規表現と拡張正規表現とどちらも使用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現１　繰り返し
grep &#39;ro\{2\}t&#39; 5_grep/grep_test.txt

echo 基本正規表現２　直後のメタ文字を普通の文字として扱う
grep &#39;ro\\{2\\}t&#39; 5_grep/grep_test.txt

echo 拡張正規表現１　繰り返し
grep -E &#39;ro\{2\}t&#39; 5_grep/grep_test.txt

echo 拡張正規表現２　直後のメタ文字を普通の文字として扱う
grep -E &#39;ro\\{2\\}t&#39; 5_grep/grep_test.txt</code></pre></div>



<p>指定したファイルの中で「ro\{2\}t」という文字列を抽出したいです。しかし「ro\{2\}t」は繰り返しで出てきたoを2回繰り返すメタ文字です。</p>



<p>このままでは「root」が抽出されるので「\」を「\」で普通の文字列にエスケープします。<span class="swl-marker mark_orange">これで「ro\{2\}t」という文字列が抽出できます。</span></p>



<p>拡張正規表現においては「ro\{2\}t」の「\」はメタ文字と解釈されているので何も表示されません。</p>



<p>同じく「ro\{2\}t」の「\」を「\」で普通の文字列にエスケープします。<span class="swl-marker mark_orange">これで拡張正規表現の方も「ro\{2\}t」という文字列が抽出できます。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現１
root
基本正規表現２
ro\{2\}t
拡張正規表現１
拡張正規表現２
ro\{2\}t</code></pre></div>



<p class="has-border -border01">どちらも「ro\\{2\\}t」とすることで「ro\{2\}t」という文字列が抽出されました。</p>



<h3 class="wp-block-heading">指定する文字列をクループ化して扱うには()を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">指定する文字列をクループ化して扱う</span>場合です。基本正規表現と拡張正規表現とどちらも使用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 基本正規表現１　単体文字繰り返し
grep &#39;abc\{2\}&#39; 5_grep/grep_test.txt

echo 基本正規表現２　グループで繰り返し
grep &#39;a\(bc\)\{2\}&#39; 5_grep/grep_test.txt

echo 拡張正規表現１　単体文字繰り返し
grep -E &#39;abc{2}&#39; 5_grep/grep_test.txt

echo 拡張正規表現２　グループで繰り返し
grep -E &#39;a(bc){2}&#39; 5_grep/grep_test.txt</code></pre></div>



<p>基本正規表現１は指定したファイルの中で「abc」の一つ前の「c」を2回繰り返すというシェルスクリプトでした。しかし「bc」の繰り返しにしたい場合は、基本正規表現２のように<span class="swl-marker mark_orange">該当文字列を<span class="swl-inline-color has-swl-deep-01-color">\(\)</span>で囲いグループ化します。</span></p>



<p>拡張正規表現１も同様です。「bc」の繰り返しにしたい場合は、拡張正規表現２のように<span class="swl-marker mark_orange">該当文字列を<span class="swl-inline-color has-swl-deep-01-color">()</span>で囲いグループ化します。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>基本正規表現１
abcc
基本正規表現２
abcbc
abcbcbc
拡張正規表現１
abcc
拡張正規表現２
abcbc
abcbcbc</code></pre></div>



<p class="has-border -border01">どちらも「a」とその後に「bc」が2回以上繰り返す文字列が抽出されました。</p>



<h3 class="wp-block-heading">複数の正規表現をORで繋げるには「|」を使用します。</h3>



<p><span class="swl-inline-color has-swl-deep-01-color">複数の正規表現をORで繋げる</span>場合です。拡張正規表現しか対応していません。</p>



<p>指定したファイルの中で「abc」か「123」という文字列を抽出したいです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 拡張正規表現１
grep -E &#39;abc|123&#39; 5_grep/grep_test.txt</code></pre></div>



<p>「abc|123」で可能です。シェルスクリプトを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>abcc
abcbc
abcbcbc
123
12323
1232323
123123123
12333
abcabcabc</code></pre></div>



<p class="has-border -border01">指定したファイルの中で「abc」か「123」という文字列を含む行が抽出されました。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="614" src="https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-4-1024x614.jpg" alt="training" class="wp-image-4544" srcset="https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-4-1024x614.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-4-300x180.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-4-768x461.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-4.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<p>ではここで質問です。</p>



<p class="is-style-big_icon_hatena">したのシェルスクリプトを実行すると取得できる文字列は何になるでしょうか？</p>



<dl class="swell-block-dl">
<dt class="swell-block-dl__dt">grep -E &#8216;abc|123{3}&#8217; 5_grep/grep_test.txt</dt>



<dd class="swell-block-dl__dd">
<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>abcc
abcbc
abcbcbc
12333
abcabcabc</code></pre></div>
</dd>



<dt class="swell-block-dl__dt">grep -E &#8216;abc|(123){3}&#8217; 5_grep/grep_test.txt</dt>



<dd class="swell-block-dl__dd">
<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>abcc
abcbc
abcbcbc
123123123
abcabcabc</code></pre></div>
</dd>



<dt class="swell-block-dl__dt">grep -E &#8216;(abc|123){3}&#8217; 5_grep/grep_test.txt</dt>



<dd class="swell-block-dl__dd">
<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>123123123
abcabcabc</code></pre></div>
</dd>
</dl>


<div class="swell-block-balloon"><div class="c-balloon -bln-right" data-col="blue"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">管理人</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>シェルスクリプトのgrepは非常によく使用するので、このページを何度も読んで是非マスターしてください。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shellscript-grep/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】変数の文字列を切り出して抽出する方法！</title>
		<link>https://sugublog.org/shellscript-cutting-and-extracting-variable-strings/</link>
					<comments>https://sugublog.org/shellscript-cutting-and-extracting-variable-strings/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Thu, 07 Mar 2024 09:03:21 +0000</pubDate>
				<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[変数]]></category>
		<category><![CDATA[文字列]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6472</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/script111-1024x597.jpg" class="webfeedsFeaturedVisual" /></p>ということで今回は、シェルスクリプトの変数の文字列を切り出して抽出する方法を、現役エンジニアの筆者がまとめます。 シェルスクリプトの変数で文字列を切り出して抽出する方法 今回紹介するshellscriptの変数で文字列を [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/script111-1024x597.jpg" class="webfeedsFeaturedVisual" /></p><div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="red"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/02/cropped-dog003-150x150.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/02/cropped-dog003-150x150.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">シェルスクリプトの変数の文字列を切り出して抽出したいエンジニア</span></div><div class="c-balloon__body -thinking -border-on"><div class="c-balloon__text">
<p><strong><span class="swl-inline-color has-swl-deep-01-color">shellscript</span></strong>で変数の少し違う文字列を別の変数を作成して使用していると、変数管理が複雑化するので何とかしたい</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="swell-block-balloon"><div class="c-balloon -bln-right" data-col="green"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_001.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_001.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">管理人</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>そういった時に<strong><span class="swl-inline-color has-swl-deep-01-color">変数の文字列を切り出して抽出</span></strong>する事で解決します。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>

<div class="swell-block-balloon"><div class="c-balloon -bln-right" data-col="blue"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/04/illust10_01.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/04/illust10_01.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>変数が変化すれば切り出し抽出した文字列も変化するので、管理も運用も楽です。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>ということで今回は、<span class="swl-format-1"><span class="swl-marker mark_orange"><strong>シェルスクリプトの変数の文字列を切り出して抽出する方法</strong></span></span>を、現役エンジニアの筆者がまとめます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトの変数で文字列を切り出して抽出する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-2-1-1024x683.jpg" alt="code" class="wp-image-4188" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-2-1-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-2-1-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-2-1-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-2-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>今回紹介する<strong><span class="swl-inline-color has-swl-deep-01-color">shellscriptの変数で文字列を切り出して抽出</span></strong>する方法は以下の2本です。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>shellscriptの変数で文字列を切り出して抽出する方法２選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li><span class="swl-inline-color has-swl-deep-01-color">数字</span>で指定して文字列を切り出して抽出する</li>



<li><span class="swl-inline-color has-swl-deep-01-color">パターン</span>で文字列を切り出して抽出する</li>
</ul>
</div></div>



<h2 class="wp-block-heading">数字で指定して文字列を切り出して抽出する</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-1024x576.jpg" alt="文字列切り出し" class="wp-image-4171" srcset="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>シェルスクリプトの変数を<span class="swl-inline-color has-swl-deep-01-color">数字で指定して</span>、文字列を切り出して抽出する方法の基礎は以下です。</p>



<p>記述がややこしいですが、下の表のように追加するコードを意識していくと分かりやすくなります。</p>



<figure class="wp-block-table"><table><thead><tr><th>種類</th><th>shellscript</th><th>説明</th><th>追加するコード</th></tr></thead><tbody><tr><th>&#8211;</th><td>変数=文字列</td><td>変数指定</td><td>&#8211;</td></tr><tr><th>&#8211;</th><td>${変数}</td><td>変数展開</td><td>${}</td></tr><tr><th colspan="4">文字列を切り出す方法</th></tr><tr><th>1</th><td>${変数:開始位置}</td><td>開始位置前方から</td><td>:開始位置</td></tr><tr><th>2</th><td>${変数: -開始位置}</td><td>開始位置後方から</td><td>: -開始位置</td></tr><tr><th>3</th><td>${変数:開始位置:個数}</td><td>開始位置と個数指定</td><td>: 開始位置:個数</td></tr><tr><th>4</th><td>${変数:開始位置:-末尾指定}</td><td>開始位置と末尾指定</td><td>:開始位置:-末尾指定</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトの変数を数字で指定して文字列を切り出し抽出する方法</figcaption></figure>



<p class="is-style-big_icon_caution">※２の開始位置を後方から指定する場合の「:」と「-」の間に半角スペースが必要になる事が注意する点です。</p>



<h3 class="wp-block-heading">開始位置を<span class="swl-inline-color has-swl-deep-01-color">前方</span>から指定する文字列切り出し</h3>



<p>では開始位置を<span class="swl-inline-color has-swl-deep-01-color">前方から指定</span>する文字列切り出しを行います。</p>



<p>以下のような変数を指定します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>suuji=0123456789</code></pre></div>



<p>１を開始位置に指定して表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${suuji:1}</code></pre></div>



<p>このシェルスクリプトを実行してみます。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-2-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-execution/">【シェルスクリプト基礎】コマンドを実行する様々な方法をご紹介！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトを実行する時に困った事はありませんか？ シェルスクリプトのコマンド実行での失敗メッセージ一覧 「実行権限がありません」 「コマンドが見つかりませ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>123456789</code></pre></div>



<p>結果は上記になりました。</p>



<p class="is-style-icon_book">シェルスクリプトで１番目を指定するのは「0」になります。今回は1を指定したので２番目の1から末尾までが表示されています。</p>



<p class="has-border -border01">2番目から末尾までがきちんと表示されています。</p>



<h3 class="wp-block-heading">開始位置を<span class="swl-inline-color has-swl-deep-01-color">後方</span>から指定する文字列切り出し</h3>



<p>次に開始位置を<span class="swl-inline-color has-swl-deep-01-color">後方から指定</span>する文字列切り出しを行います。</p>



<p>１を開始位置に指定して表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${suuji: -3}</code></pre></div>



<p>このシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>789</code></pre></div>



<p>結果は上記になりました。</p>



<p class="has-border -border01">後方始まりで３つ目から末尾までがきちんと表示されています。</p>



<h3 class="wp-block-heading"><span class="swl-inline-color has-swl-deep-01-color">開始位置と個数</span>を指定する文字列切り出し</h3>



<p>次に<span class="swl-inline-color has-swl-deep-01-color">開始位置と個数を指定</span>する文字列切り出しを行います。</p>



<p>開始位置を３、個数を６に指定して表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${suuji:3:6}</code></pre></div>



<p>このシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>345678</code></pre></div>



<p>結果は上記になりました。</p>



<p class="has-border -border01">開始位置が３で個数が６つきちんと表示されています。</p>



<h3 class="wp-block-heading"><span class="swl-inline-color has-swl-deep-01-color">開始位置と末尾</span>を指定する文字列切り出し</h3>



<p>次に<span class="swl-inline-color has-swl-deep-01-color">開始位置と末尾を指定</span>する文字列切り出しを行います。</p>



<p>開始位置を３、末尾を-3に指定して表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${suuji:3:-3}</code></pre></div>



<p>このシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>3456</code></pre></div>



<p>結果は上記になりました。</p>



<p class="has-border -border01">開始位置が３で後方から3番目の6までが、きちんと表示されています。</p>



<h2 class="wp-block-heading">補足：配列に格納されている文字列を切り出して抽出</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/07/server_007-1024x683.jpg" alt="配列" class="wp-image-3594" srcset="https://sugublog.org/wp-content/uploads/2021/07/server_007-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/07/server_007-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/07/server_007-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/07/server_007-1536x1025.jpg 1536w, https://sugublog.org/wp-content/uploads/2021/07/server_007-scaled.jpg 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>同じ様に<span class="swl-marker mark_orange"><span class="swl-inline-color has-swl-deep-01-color">配列に格納されている文字列</span>も部分的に切り出して抽出</span>できます。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-300x201.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-array/">【シェルスクリプト】配列の使い方！宣言、格納、参照のやり方を教えます</a>
						<span class="p-blogCard__excerpt">shellscriptで配列を使いたいけど、どうやって扱えば良いかわかりません。 などと言ったシェルスクリプトの配列について難しいという声が多いです。 なので配列の宣言か&#8230;</span>					</div>
				</div>
			</div>
		</div>


<figure class="wp-block-table"><table><thead><tr><th>種類</th><th>shellscript</th><th>説明</th><th>追加するコード</th></tr></thead><tbody><tr><th>&#8211;</th><td>配列=(文字列1 文字列2 &#8230;)</td><td>配列に文字列格納</td><td>&#8211;</td></tr><tr><th>&#8211;</th><td>${配列[@]}</td><td>配列全て展開</td><td>${[@]}</td></tr><tr><th colspan="4">配列の文字列を切り出す方法</th></tr><tr><th>1</th><td>${配列[@]:開始位置}</td><td>開始位置前方から</td><td>:開始位置</td></tr><tr><th>2</th><td>${配列[@]: -開始位置}</td><td>開始位置後方から</td><td>: -開始位置</td></tr><tr><th>3</th><td>${配列[@]:開始位置:個数}</td><td>開始位置と個数指定</td><td>: 開始位置:個数</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトの配列を数字で指定して文字列を切り出し抽出する方法</figcaption></figure>



<h3 class="wp-block-heading">配列で指定する文字列切り出し</h3>



<p>では同じ様に配列で指定する文字列切り出しを行います。以下のような配列があるとします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>array=(000 111 222 333 444 555)</code></pre></div>



<p>１を開始位置に指定して表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${array[@]:1}
echo ${array[@]: -3}
echo ${array[@]:1:3}</code></pre></div>



<p>このシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>111 222 333 444 555
333 444 555
111 222 333</code></pre></div>



<p>結果は上記になりました。</p>



<p class="has-border -border01">変数の文字列切り出しと同様に、配列の中身が切り出されています。</p>



<h3 class="wp-block-heading">変数ではできて配列では<span class="swl-inline-color has-swl-deep-01-color">出来ない</span>切り出し</h3>



<p>変数ではできていた開始位置と後方位置を指定して切り出す方法だけは配列ではできません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${array[@]:1:-1}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>-bash: -1: substring expression &lt; 0</code></pre></div>



<p class="is-style-big_icon_batsu">配列の「開始位置と後方位置を指定して切り出す方法」はエラーで切り出しできませんでした。</p>



<h2 class="wp-block-heading">パターンで文字列を切り出して抽出する</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/11/script_1114-1024x683.jpg" alt="スクリプト" class="wp-image-4504" srcset="https://sugublog.org/wp-content/uploads/2021/11/script_1114-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/script_1114-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/script_1114-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/script_1114.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange"><strong>シェルスクリプトの変数をパターンで指定</strong>して、<strong>文字列を切り出して抽出する方法</strong></span>です。2パターンあります。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>パターンで指定して、文字列を切り出して抽出する方法2選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>文字列の<span class="swl-inline-color has-swl-deep-01-color">先頭</span>からパターンマッチする</li>



<li>文字列の<span class="swl-inline-color has-swl-deep-01-color">後方</span>からパターンマッチする</li>
</ul>
</div></div>



<p>パターンで指定する時のコードも纏めておきます。</p>



<figure class="wp-block-table"><table><thead><tr><th>種類</th><th>shellscript</th><th>説明</th><th>追加するコード</th></tr></thead><tbody><tr><th>&#8211;</th><td>変数=文字列</td><td>変数指定</td><td>&#8211;</td></tr><tr><th>&#8211;</th><td>${変数}</td><td>変数展開</td><td>${}</td></tr><tr><th colspan="4">文字列をパターンで切り出す方法</th></tr><tr><th>1</th><td>${変数#パターン}</td><td>開始位置<span class="swl-inline-color has-swl-deep-02-color">前方</span>、<span class="swl-inline-color has-swl-deep-02-color">最短</span>マッチ</td><td>#パターン</td></tr><tr><th>2</th><td>${変数##パターン}</td><td>開始位置<span class="swl-inline-color has-swl-deep-02-color">前方</span>、<span class="swl-inline-color has-swl-deep-03-color">最長</span>マッチ</td><td>##パターン</td></tr><tr><th>3</th><td>${変数%パターン}</td><td>開始位置<span class="swl-inline-color has-swl-deep-03-color">後方</span>、<span class="swl-inline-color has-swl-deep-02-color">最短</span>マッチ</td><td>%パターン</td></tr><tr><th>4</th><td>${変数%%パターン}</td><td>開始位置<span class="swl-inline-color has-swl-deep-03-color">後方</span>、<span class="swl-inline-color has-swl-deep-03-color">最長</span>マッチ</td><td>%%パターン</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトの変数をパターンで指定して文字列を切り出し抽出する方法</figcaption></figure>



<p class="is-style-icon_info">パターンマッチなので「*（アスタリスク）」が使用できます。アスタリスクは任意の文字列として扱えます。</p>



<h3 class="wp-block-heading">文字列の<span class="swl-inline-color has-swl-deep-01-color">先頭</span>からパターンマッチする</h3>



<p>では文字列の<span class="swl-inline-color has-swl-deep-01-color">先頭</span>からパターンマッチする時のシェルスクリプトを何個か記述してみます。</p>



<p>まず以下のような変数を指定しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>mojiretsu=shellscript.sh.zp</code></pre></div>



<h3 class="wp-block-heading">文字列の<span class="swl-inline-color has-swl-deep-01-color">先頭</span>からパターンマッチ１：<span class="swl-inline-color has-swl-deep-01-color">先頭文字指定</span></h3>



<p>以下のシェルスクリプトで先頭が「shell」の文字列であれば、指定した文字列を切り取って抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${mojiretsu#shell}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>script.sh.zp</code></pre></div>



<p class="has-border -border01">結果は指定した「shell」を切り取って抽出できています。</p>



<h3 class="wp-block-heading">文字列の<span class="swl-inline-color has-swl-deep-01-color">先頭</span>からパターンマッチ２：<span class="swl-inline-color has-swl-deep-01-color">最短マッチ</span></h3>



<p>以下のシェルスクリプトで先頭が任意の文字列（*）で「.」の文字列があれば、最短マッチで指定した文字列を切り取って抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${mojiretsu#*.}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>sh.zp</code></pre></div>



<p class="has-border -border01">結果は<span class="swl-inline-color has-swl-deep-01-color">最初に「.」があった文字列</span>までを切り取って抽出できています。</p>



<h3 class="wp-block-heading">文字列の<span class="swl-inline-color has-swl-deep-01-color">先頭</span>からパターンマッチ３：<span class="swl-inline-color has-swl-deep-01-color">最長マッチ</span></h3>



<p>先程と同じ条件で「.」の文字列があれば、最長マッチで指定した文字列を切り取って抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${mojiretsu##*.}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>zp</code></pre></div>



<p class="has-border -border01">結果は<span class="swl-inline-color has-swl-deep-01-color">最後に「.」があった文字列</span>までを切り取って抽出できています。</p>



<h3 class="wp-block-heading">文字列の<span class="swl-inline-color has-swl-deep-02-color">末尾</span>からパターンマッチ１：<span class="swl-inline-color has-swl-deep-01-color">先頭文字指定</span></h3>



<p>今度は文字列の<span class="swl-inline-color has-swl-deep-01-color">末尾</span>からパターンマッチする時のシェルスクリプトを何個か記述してみます。</p>



<p>以下のシェルスクリプトで末尾が「zp」の文字列であれば、指定した文字列を切り取って抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${mojiretsu%zp}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>shellscript.sh.</code></pre></div>



<p class="has-border -border01">結果は指定した「zp」を切り取って抽出できています。</p>



<h3 class="wp-block-heading">文字列の<span class="swl-inline-color has-swl-deep-01-color"><span class="swl-inline-color has-swl-deep-02-color">末尾</span></span>からパターンマッチ２：<span class="swl-inline-color has-swl-deep-01-color">最短マッチ</span></h3>



<p>以下のシェルスクリプトで末尾が任意の文字列（*）で「.」の文字列があれば、最短マッチで指定した文字列を切り取って抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${mojiretsu%.*}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>shellscript.sh</code></pre></div>



<p class="has-border -border01">結果は<span class="swl-inline-color has-swl-deep-01-color">末尾から見て最初に「.」があった文字列</span>までを切り取って抽出できています。</p>



<h3 class="wp-block-heading">文字列の<span class="swl-inline-color has-swl-deep-01-color"><span class="swl-inline-color has-swl-deep-02-color">末尾</span></span>からパターンマッチ３：<span class="swl-inline-color has-swl-deep-01-color">最長マッチ</span></h3>



<p>先程と同じ条件で「.」の文字列があれば、最長マッチで指定した文字列を切り取って抽出します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo ${mojiretsu%%.*}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>shellscript</code></pre></div>



<p class="has-border -border01">結果は<span class="swl-inline-color has-swl-deep-01-color">末尾から見て最後に「.」があった文字列</span>までを切り取って抽出できています。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ：シェルスクリプトの変数で文字列を切り出して抽出する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-4-1024x576.jpg" alt="スクリプト" class="wp-image-3872" srcset="https://sugublog.org/wp-content/uploads/2021/08/script_0809-4-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-4-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-4-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-4.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color"><span class="swl-marker mark_orange">shellscriptの変数で文字列を切り出して抽出する方法</span></span></strong>は以下の2本でした。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>shellscriptの変数で文字列を切り出して抽出する方法２選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li><span class="swl-inline-color has-swl-deep-01-color">数字</span>で指定して文字列を切り出して抽出する</li>



<li><span class="swl-inline-color has-swl-deep-01-color">パターン</span>で文字列を切り出して抽出する</li>
</ul>
</div></div>



<h3 class="wp-block-heading">数字で指定して文字列を切り出して抽出する</h3>



<figure class="wp-block-table"><table><thead><tr><th>種類</th><th>shellscript</th><th>説明</th><th>実行結果</th></tr></thead><tbody><tr><th>&#8211;</th><td>suuji=0123456789</td><td>変数指定</td><td>&#8211;</td></tr><tr><th>&#8211;</th><td>${suuji}</td><td>変数展開</td><td>0123456789</td></tr><tr><th colspan="4">文字列を切り出す方法</th></tr><tr><th>1</th><td>${suuji:3}</td><td>開始位置前方から</td><td>3456789</td></tr><tr><th>2</th><td>${suuji: -3}</td><td>開始位置後方から</td><td>789</td></tr><tr><th>3</th><td>${suuji:3:6}</td><td>開始位置と個数指定</td><td>345678</td></tr><tr><th>4</th><td>${suuji:3:-3}</td><td>開始位置と末尾指定</td><td>3456</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトの変数を数字で指定して文字列を切り出し抽出した結果まとめ</figcaption></figure>



<p class="is-style-big_icon_caution">※２の開始位置を後方から指定する場合の「:」と「-」の間に半角スペースが必要になる事が注意する点です。</p>



<h3 class="wp-block-heading">配列に格納されている文字列を切り出して抽出</h3>



<figure class="wp-block-table"><table><thead><tr><th>種類</th><th>shellscript</th><th>説明</th><th>実行結果</th></tr></thead><tbody><tr><th>&#8211;</th><td>array=(00 11 22 33 44 55)</td><td>配列に文字列格納</td><td>&#8211;</td></tr><tr><th>&#8211;</th><td>${array[@]}</td><td>配列全て展開</td><td>00 11 22 33 44 55</td></tr><tr><th colspan="4">配列の文字列を切り出す方法</th></tr><tr><th>1</th><td>${array[@]:1}</td><td>開始位置前方から</td><td>11 22 33 44 55</td></tr><tr><th>2</th><td>${array[@]: -3}</td><td>開始位置後方から</td><td>33 44 55</td></tr><tr><th>3</th><td>${array[@]:1:3}</td><td>開始位置と個数指定</td><td>11 22 33</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトの配列を数字で指定して文字列を切り出し抽出した結果</figcaption></figure>



<h3 class="wp-block-heading">変数をパターンで指定して、文字列を切り出して抽出する方法</h3>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>パターンで指定して、文字列を切り出して抽出する方法2選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>文字列の<span class="swl-inline-color has-swl-deep-02-color">先頭</span>からパターンマッチする</li>



<li>文字列の<span class="swl-inline-color has-swl-deep-03-color">後方</span>からパターンマッチする</li>
</ul>
</div></div>



<figure class="wp-block-table"><table><thead><tr><th>種類</th><th>shellscript</th><th>説明</th><th>実行結果</th></tr></thead><tbody><tr><th>&#8211;</th><td>mojiretsu=shellscript.sh.zp</td><td>変数指定</td><td>&#8211;</td></tr><tr><th>&#8211;</th><td>${mojiretsu}</td><td>変数展開</td><td>shellscript.sh.zp</td></tr><tr><th colspan="4">文字列をパターンで切り出す方法</th></tr><tr><th>1</th><td>${mojiretsu#shell}</td><td>開始文字指定</td><td>script.sh.zp</td></tr><tr><th>2</th><td>${mojiretsu#*.}</td><td>開始位置<span class="swl-inline-color has-swl-deep-02-color">前方</span>、<span class="swl-inline-color has-swl-deep-02-color">最短</span>マッチ</td><td>sh.zp</td></tr><tr><th>3</th><td>${mojiretsu##*.}</td><td>開始位置<span class="swl-inline-color has-swl-deep-02-color">前方</span>、<span class="swl-inline-color has-swl-deep-03-color">最長</span>マッチ</td><td>zp</td></tr><tr><th>4</th><td>${mojiretsu%zp}</td><td>開始文字後方指定</td><td>shellscript.sh.</td></tr><tr><th>5</th><td>${mojiretsu%.*}</td><td>開始位置<span class="swl-inline-color has-swl-deep-03-color">後方</span>、<span class="swl-inline-color has-swl-deep-02-color">最短</span>マッチ</td><td>shellscript.sh</td></tr><tr><th>6</th><td>${mojiretsu%%.*}</td><td>開始位置<span class="swl-inline-color has-swl-deep-03-color">後方</span>、<span class="swl-inline-color has-swl-deep-03-color">最長</span>マッチ</td><td>shellscript</td></tr></tbody></table><figcaption class="wp-element-caption">シェルスクリプトの変数をパターンで指定して文字列を切り出し抽出した結果</figcaption></figure>



<p class="is-style-icon_info">パターンマッチなので「*（アスタリスク）」が使用できます。アスタリスクは任意の文字列として扱えます。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-right" data-col="blue"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">管理人</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>このように<strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトの変数の文字列を切り出し</span></strong>する事で変数管理が楽になります。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shellscript-cutting-and-extracting-variable-strings/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】連想配列のやり方を教えます！注意点と共にご教示</title>
		<link>https://sugublog.org/shell-script-association_array/</link>
					<comments>https://sugublog.org/shell-script-association_array/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Sun, 03 Mar 2024 12:58:23 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[連想配列]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6453</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-3-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>シェルスクリプトで配列については理解したけど、連想配列についてわからないといった悩みはないでしょうか？ 基本的には配列と同じですが、連想配列と配列の違いなども教えます。 連想配列ならではの設定や格納や参照など、１つ１つを [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-3-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプト</span></strong>で配列については理解したけど、<strong><span class="swl-inline-color has-swl-deep-01-color"><span class="swl-fz u-fz-l">連想配列</span></span></strong>についてわからないといった悩みはないでしょうか？</p>



<p>基本的には配列と同じですが、<span class="swl-marker mark_orange">連想配列と配列の違い</span>なども教えます。</p>



<p>連想配列ならではの設定や格納や参照など、１つ１つを例のshellscriptを用いて現役エンジニアの筆者が教示いたします。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<p class="is-style-big_icon_point">この記事を１つ１つ理解すれば、読み終わる頃には連想配列についてマスターできます。</p>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトの配列と連想配列の違い</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-20-1024x576.jpg" alt="シェルスクリプトの配列と連想配列の違い" class="wp-image-4427" srcset="https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-20-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-20-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-20-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-20.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトで配列と連想配列の違い</span></strong>として、<span class="swl-marker mark_blue">配列のインデックスが<span class="swl-inline-color has-swl-deep-02-color">数字</span></span>に対して、<span class="swl-marker mark_green">連想配列のインデックスは<span class="swl-inline-color has-swl-deep-03-color">キー</span></span>で指定します。</p>



<p class="is-style-icon_book">シェルスクリプトの配列についてまだ理解していない人は、以下にまとめていますので参照ください。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-300x201.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-array/">【シェルスクリプト】配列の使い方！宣言、格納、参照のやり方を教えます</a>
						<span class="p-blogCard__excerpt">shellscriptで配列を使いたいけど、どうやって扱えば良いかわかりません。 などと言ったシェルスクリプトの配列について難しいという声が多いです。 なので配列の宣言か&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p>キーは自分で好きにつける事が可能な文字列です。</p>



<p>一般的なスクリプトではマップや辞書などと呼ばれる事もあります。</p>



<p>では連想配列の基礎から行っていきます。</p>



<h2 class="wp-block-heading">シェルスクリプトの連想配列の基礎</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="559" src="https://sugublog.org/wp-content/uploads/2021/08/programing_0812-2-1-1024x559.jpg" alt="programing" class="wp-image-3964" srcset="https://sugublog.org/wp-content/uploads/2021/08/programing_0812-2-1-1024x559.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-2-1-300x164.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-2-1-768x419.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-2-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">連想配列の宣言のやり方</h3>



<p>まずは<strong><span class="swl-inline-color has-swl-deep-01-color">連想配列</span></strong>を作成する時に<strong>宣言</strong>をします。シェルスクリプトで連想配列の宣言は下のコマンドで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A 連想配列名</code></pre></div>



<p class="is-style-big_icon_caution">配列の時は宣言は必須ではありませんでしたが、連想配列では宣言は必須です。ここが配列との違いですので気を付けてください。</p>



<h3 class="wp-block-heading">連想配列の確認方法</h3>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列の値やキーを確認する方法</span></strong>を知っておきましょう！以下にまとめます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>連想配列の確認コマンド2選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>${連想配列名[@]}・・・<span class="swl-inline-color has-swl-deep-01-color">連想配列の<span class="swl-fz u-fz-l">値</span>の全て</span>を表示できます。</li>



<li>${!連想配列名[@]}・・・<span class="swl-inline-color has-swl-deep-01-color">連想配列の<span class="swl-fz u-fz-l">キー</span>の全て</span>を表示できます。</li>
</ul>
</div></div>



<h3 class="wp-block-heading">連想配列を初期化する方法</h3>



<p>以前使用した連想配列があれば、予期せぬ結果になりかねませんので<strong><span class="swl-inline-color has-swl-deep-01-color">連想配列を初期化する方法</span></strong>も覚えておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A 連想配列名=()</code></pre></div>



<p>空白の連想配列を作成するイメージです。</p>



<h3 class="wp-block-heading">連想配列での値の格納方法</h3>



<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">連想配列に値を格納する方法</span></strong>を教えます。シェルスクリプト構文は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>連想配列名=([キー1]=値1 [キー2=値2 ...)</code></pre></div>



<p>連想配列名の後に「=」を記入して、その後に「（）」を記入します。※すべてスペースなしで記入</p>



<p>その中にキーと値を入力します。</p>



<p>キーは[]で囲みます、そこに「=」を入力して値を記入します。※スペースなしで記入</p>



<p class="is-style-icon_info">複数格納する場合はスペースで区切り、同じ様に格納していきます。</p>



<h3 class="wp-block-heading">実践：連想配列で値をの格納してみる</h3>



<p>では実際に<strong><span class="swl-inline-color has-swl-deep-01-color">連想配列に値を格納</span></strong>してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A my_association_array1=([id]=5 [name]=yamada)</code></pre></div>



<p class="is-style-icon_good">このように宣言と連想配列の値格納を1行で行う事も可能です。</p>



<p>my_association_array1が連想配列という宣言と、それに値を格納しました。</p>



<p>下のシェルスクリプトを実行して確認してみます。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-2-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-execution/">【シェルスクリプト基礎】コマンドを実行する様々な方法をご紹介！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトを実行する時に困った事はありませんか？ シェルスクリプトのコマンド実行での失敗メッセージ一覧 「実行権限がありません」 「コマンドが見つかりませ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A my_association_array1=([id]=5 [name]=yamada)
echo ${my_association_array1[@]}
echo ${!my_association_array1[@]}</code></pre></div>



<p>シェルスクリプトの実行結果は以下となりました。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yamada 5
name id</code></pre></div>



<p class="has-border -border01">1行目で値が、2行目でキーが全て表示されました。</p>



<p class="is-style-big_icon_caution">表示の順序は入力した順とは限らないので注意です。</p>



<h3 class="wp-block-heading">連想配列での値の参照方法</h3>



<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">連想配列に入れた値を参照</span></strong>する方法です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${連想配列名[キー]}</code></pre></div>



<p>これでキーに対する値を参照する事ができます。</p>



<h3 class="wp-block-heading">実践：連想配列で値を参照してみる</h3>



<p>では実際に連想配列の値を参照してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A my_association_array1=([id]=5 [name]=yamada)
echo ${my_association_array1[name]}</code></pre></div>



<p>my_association_array1の連想配列にキー「id」と「name」に対する値を格納し、キーが「name」の値を参照します。</p>



<p>シェルスクリプトを実行して確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yamada</code></pre></div>



<p class="has-border -border01">キーが「name」の値の「yamada」が表示され、連想配列の参照ができています。</p>



<h2 class="wp-block-heading">連想配列に新規キーと値を格納する</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="436" src="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-2-1024x436.jpg" alt="連想配列に新規キーと値を格納" class="wp-image-4501" srcset="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-2-1024x436.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-2-300x128.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-2-768x327.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列に新規のキーと値を入れる方法</span></strong>です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>連想配列名[新規キー]=新規値</code></pre></div>



<p>これで新規にキーと値を格納できます。</p>



<h3 class="wp-block-heading">実践：連想配列に新規キーと値を格納してみる</h3>



<p>では実際に連想配列の値を参照してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A my_association_array1=([id]=5 [name]=yamada)
my_association_array1[country]=Japan
echo ${my_association_array1[@]}
echo ${!my_association_array1[@]}</code></pre></div>



<p>my_association_array1の連想配列に新規キー「country」と値「Japan」を格納します。</p>



<p>シェルスクリプトを実行して確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yamada 5 Japan
name id country</code></pre></div>



<p class="has-border -border01">新規キー「country」と、新規値の「Japan」が、追加表示されている事がわかります。</p>



<h2 class="wp-block-heading">連想配列の値を修正する</h2>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列の値を修正する方法</span></strong>です。<span class="swl-marker mark_orange">既存のキーに対して値を格納すると<strong>上書き保存</strong>されます。</span></p>



<h3 class="wp-block-heading">実践：連想配列の値を修正してみる</h3>



<p>では実際に連想配列の値を修正してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A my_association_array1
my_association_array1=([id]=1 [name]=yamada)
echo ${my_association_array1[name]}</code></pre></div>



<p>my_association_array1の連想配列の「name」キーに「yamada」という値が格納されています。</p>



<p>シェルスクリプトを実行して確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yamada</code></pre></div>



<p>下のように既存キー「name」に新規値の「tanaka」を格納しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_association_array1[name]=tanaka
echo ${my_association_array1[name]}</code></pre></div>



<p>更にシェルスクリプトを実行して確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>tanaka</code></pre></div>



<p class="has-border -border01">「yamada」から「tanaka」に値が修正されました。</p>


<div class="p-blogParts post_content" data-partsID="6113">
<div class="wp-block-columns">
<div class="wp-block-column">
<a href="https://px.a8.net/svt/ejp?a8mat=3TNJ87+8UIXF6+5EPG+65U41" rel="nofollow">
<img decoding="async" border="0" width="250" height="250" alt="" src="https://www29.a8.net/svt/bgt?aid=231205399535&#038;wid=001&#038;eno=01&#038;mid=s00000025234001035000&#038;mc=1"></a>
<img decoding="async" border="0" width="1" height="1" src="https://www18.a8.net/0.gif?a8mat=3TNJ87+8UIXF6+5EPG+65U41" alt="">
</div>



<div class="wp-block-column">
<a href="https://px.a8.net/svt/ejp?a8mat=3HP27C+14HHWY+3XAE+69P01" rel="nofollow">
<img decoding="async" border="0" width="300" height="250" alt="" src="https://www27.a8.net/svt/bgt?aid=211121256068&#038;wid=001&#038;eno=01&#038;mid=s00000018311001053000&#038;mc=1"></a>
<img decoding="async" border="0" width="1" height="1" src="https://www11.a8.net/0.gif?a8mat=3HP27C+14HHWY+3XAE+69P01" alt="">
</div>
</div>
</div>


<h2 class="wp-block-heading">連想配列のキーの値を削除する</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-7-1024x576.jpg" alt="連想配列のキーの値を削除" class="wp-image-4172" srcset="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-7-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-7-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-7-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-7.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列のキーを削除する方法</span></strong>です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>unset 連想配列名[キー]</code></pre></div>



<h3 class="wp-block-heading">実践：連想配列のキーの値を削除してみる</h3>



<p>では実際に連想配列のキーを削除してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A my_association_array1
my_association_array1=([id]=1 [name]=yamada)
echo ${my_association_array1[@]}</code></pre></div>



<p>my_association_array1の連想配列に「id」と「name」キーがあります。</p>



<p>シェルスクリプトを実行して確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>yamada 1</code></pre></div>



<p class="has-border -border01">キーに対応する値の「yamada」と「1」が表示されています。</p>



<p>下のように「name」キーを削除してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>unset my_association_array1[name]
echo ${my_association_array1[@]}</code></pre></div>



<p>更にシェルスクリプトを実行して確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1</code></pre></div>



<p class="has-border -border01">キー「name」の値の「yamada」が削除されているのがわかります。</p>



<h2 class="wp-block-heading">連想配列の要素数を数える</h2>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列の要素数を数える方法</span></strong>です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${#連想配列名[@]}</code></pre></div>



<p>連想配列名の前に「#」をつけるだけで、要素数を数える事ができます。</p>



<h3 class="wp-block-heading">実践：連想配列の要素数を数えてみる</h3>



<p>では実際に連想配列の要素数を数えてみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A my_association_array1
my_association_array1=([id]=1 [name]=yamada)
echo ${#my_association_array1[@]}</code></pre></div>



<p>my_association_array1の連想配列に「id」と「name」キーがあります。</p>



<p>シェルスクリプトを実行して確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>2</code></pre></div>



<p class="has-border -border01">連想配列の要素数「2」が表示されています。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ：シェルスクリプトの連想配列</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-18-1024x576.jpg" alt="シェルスクリプトの連想配列" class="wp-image-4425" srcset="https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-18-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-18-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-18-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-18.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列と連想配列の違い</span></strong>はキーも自分で決めた文字列で指定する。また明示的に連想配列と宣言する事です。</p>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列の宣言</span></strong>のやり方</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A 連想配列名</code></pre></div>



<p>連想配列の宣言と格納を一気にする方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -A 連想配列名=([キー1]=値1 [キー2=値2 ...)</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列の全要素数を表示</span></strong>する方法</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>連想配列の確認コマンド2選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>${連想配列名[@]}・・・<span class="swl-inline-color has-swl-deep-01-color">連想配列の<span class="swl-fz u-fz-l">値</span>の全て</span>を表示できます。</li>



<li>${!連想配列名[@]}・・・<span class="swl-inline-color has-swl-deep-01-color">連想配列の<span class="swl-fz u-fz-l">キー</span>の全て</span>を表示できます。</li>
</ul>
</div></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列を参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${連想配列名[キー]}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列に新規キーと値を格納</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>連想配列名[新規キー]=新規値</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列の値を修正</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>連想配列名[既存キー]=新規値</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列のキーの値を削除</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>unset 連想配列名[キー]</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">連想配列の要素数を数える</span></strong>方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${#連想配列名[@]}</code></pre></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/03/dog004-150x150.jpeg" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/03/dog004-150x150.jpeg" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">連想配列を理解した人</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>連想配列のやり方とまとめました。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shell-script-association_array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】配列の使い方！宣言、格納、参照のやり方を教えます</title>
		<link>https://sugublog.org/shell-script-array/</link>
					<comments>https://sugublog.org/shell-script-array/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Sat, 02 Mar 2024 17:56:17 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[shellscript]]></category>
		<category><![CDATA[配列]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6441</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-1024x684.jpg" class="webfeedsFeaturedVisual" /></p>shellscriptで配列を使いたいけど、どうやって扱えば良いかわかりません。 などと言ったシェルスクリプトの配列について難しいという声が多いです。 なので配列の宣言から格納や参照などの基本をまずまとめます。 その後に [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-1024x684.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong><span class="swl-inline-color has-swl-deep-01-color">shellscript</span></strong>で<strong><span class="swl-inline-color has-swl-deep-01-color">配列</span></strong>を使いたいけど、どうやって扱えば良いかわかりません。</p>



<p>などと言った<span class="swl-marker mark_orange">シェルスクリプトの配列について難しいという声が多いです。</span></p>



<p>なので<strong>配列</strong>の宣言から格納や参照などの基本をまずまとめます。</p>



<p>その後には要素数を数えたり、配列のコピーのやり方など使えるテクニックを現役エンジニアの筆者が教えます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<p>この記事で<span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプトの配列についての基礎知識</span></strong>や、<strong>実際の使い方</strong>などを習得する事ができます。</span></p>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトで配列の宣言をする</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="682" src="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-1024x682.jpg" alt="配列の宣言" class="wp-image-4502" srcset="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-1024x682.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-768x511.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>まずは<strong><span class="swl-inline-color has-swl-deep-01-color">配列の宣言</span></strong>のやり方を見ていきます。</p>



<p class="has-border -border02">シェルスクリプトで配列の宣言をする方法は「declare -a 配列名」です。</p>



<p>今回は「my_array1」という箱を作成して、配列と宣言します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -a my_array1</code></pre></div>



<p class="is-style-icon_book">シェルスクリプトで配列以外の宣言をする場合は以下を参照下さい。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>シェルスクリプトで配列以外の宣言方法</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>declare -r 変数 ・・・読み取り専用を宣言</li>



<li>declare -i 変数 ・・・数値を宣言</li>



<li>declare -A 変数 ・・・連想配列を宣言</li>
</ul>
</div></div>



<h2 class="wp-block-heading">シェルスクリプトでの配列の基礎</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="682" src="https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4-1024x682.jpg" alt="配列の基礎" class="wp-image-4862" srcset="https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4-1024x682.jpg 1024w, https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4-768x511.jpg 768w, https://sugublog.org/wp-content/uploads/2022/01/sweets_20220105-4.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">配列の初期化</h3>



<p>まずは<strong><span class="swl-inline-color has-swl-deep-01-color">配列を初期化</span></strong>します。配列=()とすることで初期化できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=()</code></pre></div>



<p class="has-border -border01">これで配列に値が格納されていたとしても、初期化して新しい配列として使用する事ができます。</p>



<h3 class="wp-block-heading">配列に値を格納する方法</h3>



<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">配列に値を格納</span></strong>します。配列=(値1 値2 値3 . . .)という風に値を入れていきます。</p>



<p>配列に値を格納するには配列の後にスペースなしで「=（）」を入力して、（）の中に値をスペース区切りで格納していきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)</code></pre></div>



<p class="has-border -border01">今回は「my_array1」という配列に0と1と2を格納しました。</p>



<h3 class="wp-block-heading">配列の値を参照する方法</h3>



<p>では先程、<strong><span class="swl-inline-color has-swl-deep-01-color">配列に格納した値を参照</span></strong>してみます。</p>



<p>配列の値を参照するには${配列名[インデックス番号]}で可能です。</p>



<p class="is-style-icon_info">インデックスとは配列の値を参照できる番号です。シェルスクリプトでは0からになります。一番目に入っている値はインデックス0で参照できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${my_array1[0]}</code></pre></div>



<p class="has-border -border01">これで配列の１番目（インデックス0）の値を参照できます。</p>



<h3 class="wp-block-heading">実践：配列の値を参照してみる</h3>



<p>実際に配列のインデックス0の値をechoコマンドで表示してみます。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/school_08-3-300x188.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-echo/">【シェルスクリプト基礎】echoコマンドの使い方！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトのechoコマンドの使い方で疑問に思っている事などないでしょうか？ 思い通りに文字列を表示できなかったりしないでしょうか？ シェルスクリプトでecho&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
echo ${my_array1[0]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-2-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-execution/">【シェルスクリプト基礎】コマンドを実行する様々な方法をご紹介！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトを実行する時に困った事はありませんか？ シェルスクリプトのコマンド実行での失敗メッセージ一覧 「実行権限がありません」 「コマンドが見つかりませ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p class="has-border -border01">実行結果は「0」が表示されます。</p>



<h3 class="wp-block-heading">配列の値を全て参照する方法</h3>



<p>配列にどのような値がはいっているか、一括で表示できたら楽だと思いませんか？</p>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列に入っている値を一括参照</span></strong>するには以下のシェルスクリプトで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${my_array1[@]}
または
${my_array1[*]}</code></pre></div>



<p>このスクリプトで配列の全ての値を参照できます。</p>



<h3 class="wp-block-heading">実践：配列の値を全て参照してみる</h3>



<p>実際に配列の全ての値をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="has-border -border01">結果は全ての値が参照できています。</p>



<h2 class="wp-block-heading">配列の途中から参照する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10-1024x576.jpg" alt="script" class="wp-image-3958" srcset="https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-10.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>配列の基礎で全ての値を参照する方法がありましたが、<strong><span class="swl-inline-color has-swl-deep-02-color">途中から参照する方法</span></strong>もあります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${my_array1[@]:2}</code></pre></div>



<p>上のシェルスクリプトの場合は、配列の2番目から後ろの値を参照できます。</p>



<h3 class="wp-block-heading">実践：配列の途中から参照してみる</h3>



<p>実際に配列の途中からの値をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2 3 4)
echo ${my_array1[@]:2}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>2 3 4</code></pre></div>



<p class="has-border -border01">結果は指定した2以降の全ての値が参照できています。</p>



<h2 class="wp-block-heading">配列のインデックスを参照する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="666" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-1024x666.jpg" alt="code" class="wp-image-4186" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-1024x666.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-300x195.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1-768x499.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>配列で値ではなく<strong><span class="swl-inline-color has-swl-deep-02-color">インデックスを表示する方法</span></strong>もあります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${!my_array1[@]}</code></pre></div>



<p>配列名の前に「!」を付ける事でインデックスを参照できます。</p>



<p class="is-style-icon_info">配列名[@]は配列の全てを参照するという意味でしたが、配列名の前に「！」を付ける事で全てのインデックスを参照する事が可能です。</p>



<h3 class="wp-block-heading">実践：配列のインデックスを参照してみる</h3>



<p>実際に配列のインデックスをechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(zero iti ni)
echo ${!my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="has-border -border01">結果は全てのインデックスが参照できています。</p>



<h3 class="wp-block-heading">実践：配列のインデックスを途中から参照してみる</h3>



<p>おまけで配列のインデックスを途中からechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(zero iti ni)
echo ${!my_array1[@]:2}</code></pre></div>



<p>上のシェルスクリプトを実行してみましたが、何も表示されません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="is-style-big_icon_batsu">結果的にインデックスは途中から参照する事はできません。</p>



<h2 class="wp-block-heading">インデックスを使用して配列に値を格納する</h2>



<h3 class="wp-block-heading">インデックスを使用して順番に配列に値を格納する</h3>



<p>では<strong><span class="swl-inline-color has-swl-deep-01-color">配列の好きなインデックスに値を格納</span></strong>してみます。配列名=([0]=値 [1]=値 [2]=値)で可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [2]=2)</code></pre></div>



<p>インデックス0に「0」をインデックス1に「1」を、インデックス2に「2」を入れています。</p>



<h3 class="wp-block-heading">実践：インデックスを使用して順番に配列に値を格納してみる</h3>



<p>実際に配列のインデックスに値を格納してみます。その結果をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [2]=2)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="has-border -border01">インデックスに値を格納できています。</p>



<h3 class="wp-block-heading">インデックスをいくつか飛ばして配列に値を格納する</h3>



<p><span class="swl-marker mark_orange">インデックスをいくつか飛ばして配列に値を格納することもできます。</span></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [2]=2 [4]=4)</code></pre></div>



<p>インデックス0に「0」をインデックス2に「2」を、インデックス4に「4」を入れています。</p>



<p class="is-style-big_icon_caution">この時はインデックス1,3には空白が入る事に注意しましょう！</p>



<h3 class="wp-block-heading">実践：インデックスをいくつか飛ばして配列に値を格納してみる</h3>



<p>実際に配列のインデックスにとびとびで値を格納してみます。その結果をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [2]=2 [4]=4)
echo ${my_array1[0]}
echo ${my_array1[1]}
echo ${my_array1[2]}
echo ${my_array1[3]}
echo ${my_array1[4]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0

2

4</code></pre></div>



<p class="has-border -border01">インデックスに値を格納できています。飛ばしたインデックスは空白になっています。</p>



<h2 class="wp-block-heading">配列の値を上書き格納する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-1024x576.jpg" alt="配列の上書き" class="wp-image-4171" srcset="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/randam_0915-6.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange"><strong>配列の値を修正</strong>したい場合は、インデックスを指定して値を<strong>上書き</strong>できます。</span></p>



<h3 class="wp-block-heading">実践：配列の値を上書き格納してみる</h3>



<p>配列に値を入れています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=()
my_array1=([1]=1 [2]=3 [4]=4)
echo ${my_array1[@]}</code></pre></div>



<p>入っている値を${my_array1[@]}で全表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1 3 4</code></pre></div>



<p>インデックス「2」の値「3」を2に<strong>上書き格納</strong>します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1[2]=2
echo ${my_array1[@]}</code></pre></div>



<p>配列を全表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1 2 4</code></pre></div>



<p class="has-border -border01">インデックス「2」の値が「3」から「2」に上書き格納されています。</p>



<h2 class="wp-block-heading">配列の値を削除する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="614" src="https://sugublog.org/wp-content/uploads/2021/07/web-design-007-6-1024x614.jpg" alt="配列の値の削除" class="wp-image-3616"/></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を削除</span></strong>するには「unset 配列[インデックス]」で可能です。</p>



<h3 class="wp-block-heading">実践：配列の値を削除してみる</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [2]=2 [3]=fuyo)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトの配列を全表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2 fuyo</code></pre></div>



<p>インデックス3に格納している値「fuyo」を削除してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>unset my_array1[3]
echo ${my_array1[@]}</code></pre></div>



<p>配列を全表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2</code></pre></div>



<p class="has-border -border01">インデックス3に格納している値「fuyo」が削除されている事がわかります。</p>



<h2 class="wp-block-heading">配列の要素数を数える方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="717" src="https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2-1024x717.jpg" alt="配列の要素数を数える" class="wp-image-4271" srcset="https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2-1024x717.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2-300x210.jpg 300w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2-768x538.jpg 768w, https://sugublog.org/wp-content/uploads/2021/10/uninstall_20211010-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">配列</span></strong>にはいくつの要素がはいっているか数えたい時</span>がよくあります。</p>



<p>そんな時は${#配列名[@]}で取得できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${#my_array1[@]}</code></pre></div>



<h3 class="wp-block-heading">実践：配列の要素数を数えてみる</h3>



<p>実際に<strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素数</span></strong>を数えてみます。その結果をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
echo ${#my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>3</code></pre></div>



<p class="has-border -border01">配列の要素数の「3」が表示されています。</p>



<h2 class="wp-block-heading">少し変わった配列の参照方法</h2>



<p><strong>インデックスを指定しない場合</strong>は0の値が表示されます。値を参照する方法は「${配列名[インデックス]}」でした。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [2]=2)
${my_array1}</code></pre></div>



<p class="has-border -border01">インデックスを指定しない${my_array1}には「0」が参照されます。</p>



<p>インデックス0を参照する時にない場合は空白になります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([2]=2 [3]=3 [4]=4)
echo ${my_array1}</code></pre></div>



<p class="has-border -border01">インデックス0の値が格納されていないので、${my_array1}は空白になります。</p>



<h2 class="wp-block-heading">配列の要素をコピーして使用する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/07/PC007-5-1024x683.jpg" alt="配列のコピー" class="wp-image-3714" srcset="https://sugublog.org/wp-content/uploads/2021/07/PC007-5-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/07/PC007-5-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/07/PC007-5-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/07/PC007-5.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">配列をコピー</span></strong>して<strong><span class="swl-inline-color has-swl-deep-01-color">別の配列</span></strong>として扱いたい場合</span>もあります。そんな場合は下のシェルスクリプトで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名2=(&quot;&{配列名1[@]}&quot;)</code></pre></div>



<p>ややこしいですが、下のように考えたら整理がつきやすいです。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>配列の要素をコピーして使用するシェルスクリプトの考え方</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>配列名2=()で箱を作る</li>



<li>コピーしたい配列の値を全表示する${配列名1[@]}を「&#8221;」で囲んで、箱に入れる</li>
</ul>
</div></div>



<h3 class="wp-block-heading">配列の要素をコピーして使用する時の注意点</h3>



<p><span class="swl-marker mark_yellow"><strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素をコピーして使用する時</span></strong>の<span class="swl-bg-color has-swl-deep-01-background-color">注意点</span>として、コピーした後はインデックスに空白があればつめられる</span>という事です。</p>



<p>したの例のようにインデックス2は空白の配列があります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=([0]=0 [1]=1 [3]=3)
echo ${my_array1[0]}
echo ${my_array1[1]}
echo ${my_array1[2]}
echo ${my_array1[3]}</code></pre></div>



<p>このシェルスクリプトを実行すると結果は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0
1

3</code></pre></div>



<p>インデックス2の値が空白の配列です。</p>



<p>この配列「my_array1」をコピーして配列「my_array2」にコピーします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array2=(&quot;${my_array1[@]}&quot;)
echo ${my_array2[0]}
echo ${my_array2[1]}
echo ${my_array2[2]}
echo ${my_array2[3]}</code></pre></div>



<p>今度はこのシェルスクリプトを実行すると結果は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0
1
3
</code></pre></div>



<p>コピー前の配列のインデックス2の「空白」がコピー後の配列では「3」になっています。</p>



<p class="is-style-big_icon_caution">つまり配列の要素をコピーして使用する時はインデックスに空白があれば、つめられるという事です。</p>



<h2 class="wp-block-heading">配列の要素をコピーし値を追加して配列を作る方法</h2>



<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">配列のコピー</span></strong>をして、その配列に値を入れたい</span>です。そのような時は下のシェルスクリプトで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
my_array2=(&quot;${my_array1[@]}&quot; 3 4 5)</code></pre></div>



<p>先程の配列のコピーのカッコの中に、空白を区切りとして値を格納しています。</p>



<h3 class="wp-block-heading">実践：配列のコピーをして、その配列に値を入れてみる</h3>



<p>実際に配列のコピーをして、その配列に値を入れて、その値をechoコマンドで表示してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
my_array2=(&quot;${my_array1[@]}&quot; 3 4 5)
echo ${my_array2[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2 3 4 5</code></pre></div>



<p class="has-border -border01">結果はコピーした配列の要素0,1,2の後に、指定した3,4,5が追加された配列になっています。</p>



<p>同じ配列に値を格納したいのであれば、下のシェルスクリプトで可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
my_array1=(&quot;${my_array1[@]}&quot; 3 4 5)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2 3 4 5</code></pre></div>



<p class="has-border -border01">結果は同じ配列にでも同じやり方で値をコピーして追加格納できています。</p>



<p>また単純に配列に値を入れたいのであれば、下のように「+=」を使用すれば簡単です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>my_array1=(0 1 2)
my_array1+=(3 4 5)
echo ${my_array1[@]}</code></pre></div>



<p>上のシェルスクリプトを実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>0 1 2 3 4 5</code></pre></div>



<p class="has-border -border01">結果は同じ配列に簡単に追加格納できています。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>




<h2 class="wp-block-heading">まとめ：シェルスクリプトで配列の使い方について</h2>


<div class="wp-block-image is-style-border">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="684" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-1024x684.jpg" alt="配列" class="wp-image-4810" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-1024x684.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-300x201.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152-768x513.jpg 768w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-e1709401330152.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>シェルスクリプトで<strong><span class="swl-inline-color has-swl-deep-01-color">配列の宣言</span></strong>をする方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>declare -a 配列名</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列を初期化</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名=()</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列に値を格納</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名=(値0 値1 値2 ...)</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${配列名[インデックス番号]}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を全て参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${配列名[@]}
または
${配列名[*]}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を途中から全て参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${配列名[@]:位置}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列のインデックス値を全て参照</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${!配列名[@]}</code></pre></div>



<p class="is-style-big_icon_caution">インデックスは途中から参照する事はできません。</p>



<p>インデックスを使用して順番に配列に値を格納する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名=([インデックス値0]=値0 [インデックス値1]=値1 [インデックス値2]=値2 ...)</code></pre></div>



<p class="is-style-icon_announce">インデックス値をとびとびにした場合は、とんだインデックスの値は空白になる</p>



<p class="is-style-icon_info">指定したインデックスに値が格納されている時は、上書き格納される</p>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の値を削除</span></strong>する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>unset 配列名[インデックス値]</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素数を数える</span></strong>方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>${#配列名[@]}</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">配列の要素をコピー</span></strong>して使用する方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名2=(&quot;&{配列名1[@]}&quot;)</code></pre></div>



<p class="is-style-big_icon_point">配列の要素をコピーして使用する時はインデックスに空白があれば、つめられる。</p>



<p>配列の要素をコピーし値を追加して配列を作る方法</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>新配列名=(&quot;${旧配列名[@]}&quot; 追加する値1 追加する値2 追加する値3 ...)</code></pre></div>



<p>同じ配列に値を格納したい</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>配列名=(&quot;${配列名[@]}&quot; 追加する値1 追加する値2 追加する値3 ...)
または
配列名+=(追加する値1 追加する値2 追加する値3 ...)</code></pre></div>


<div class="swell-block-balloon"><div class="c-balloon -bln-right" data-col="blue"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/02/mine_white_002-e1624111291945.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">管理人</span></div><div class="c-balloon__body -speaking -border-on"><div class="c-balloon__text">
<p>配列は覚える事が沢山ありますが、シェルスクリプトでは必須項目のうちの一つなので、何度も読み直してマスターしてください。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shell-script-array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】-bash: [: q: 整数の式が予期されますのエラー</title>
		<link>https://sugublog.org/shell-script-bash-seisunosikigayokisaremasu/</link>
					<comments>https://sugublog.org/shell-script-bash-seisunosikigayokisaremasu/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Thu, 23 Nov 2023 01:43:31 +0000</pubDate>
				<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[トラブル]]></category>
		<category><![CDATA[エラー]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=5981</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/11/programing_school1123-3-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>シェルスクリプトを実行していて「-bash: [: q: 整数の式が予期されます」のエラーがでました。 解決方法がわかりましたので、覚書しておきます。 -bash: [: q: 整数の式が予期されますのエラーの対処法 &#038; [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/11/programing_school1123-3-1024x576.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong><span class="swl-inline-color has-swl-deep-01-color">シェルスクリプト</span></strong>を実行していて「<strong><span class="swl-inline-color has-swl-deep-01-color">-bash: [: q: 整数の式が予期されます</span></strong>」のエラーがでました。</p>



<p>解決方法がわかりましたので、覚書しておきます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">-bash: [: q: 整数の式が予期されますのエラーの対処法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/06/shutterstock_1433996435-min-1024x683.jpg" alt="エラー" class="wp-image-2885"/></figure>
</div>


<p>&#8216;[&#8216;などのテストコマンドを使用している時に出たエラー</p>



<p class="has-border -border02">解決策は’[’を’[[’に変更するだけです。</p>



<h2 class="wp-block-heading">実際のシェルスクリプト</h2>



<p>実際にエラーが出たシェルスクリプトです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>while :
 do
 read -p &quot;ファイルの何行目を表示させますか？&quot; my_row
  if [ $row_count -lt $my_row ]; then
   echo $my_row行目に文字はありません
   continue
  elif [ $my_row == q ]; then
   echo 終了します
   break
  else
   sed -n ${my_row}p $file
  fi
 done</code></pre></div>



<p>このテストコマンドを[[ ]]に変更しただけで、エラーが出なくなりました。</p>



<p>これからの対策として[]は使用せずに[[]]に統一しようと思います。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shell-script-bash-seisunosikigayokisaremasu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】構文エラー: 無効な計算演算子です (エラーのあるトー クンは〇)</title>
		<link>https://sugublog.org/shell-script-error-mukounakeisannennzanshi/</link>
					<comments>https://sugublog.org/shell-script-error-mukounakeisannennzanshi/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Thu, 23 Nov 2023 01:24:41 +0000</pubDate>
				<category><![CDATA[トラブル]]></category>
		<category><![CDATA[エラー]]></category>
		<category><![CDATA[シェルスクリプト]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=5978</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-8-1024x782.jpg" class="webfeedsFeaturedVisual" /></p>シェルスクリプトを実行していて「[[: 9 while_read.txt: 構文エラー: 無効な計算演算子です (エラーのあるトー クンは &#8220;.txt&#8221;)」のようなエラーが出ました。 その原因と対 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-8-1024x782.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong>シェルスクリプト</strong>を実行していて「<strong><span class="swl-inline-color has-swl-deep-01-color">[[: 9 while_read.txt: 構文エラー: 無効な計算演算子です (エラーのあるトー クンは &#8220;.txt&#8221;)</span></strong>」のようなエラーが出ました。</p>



<p>その原因と対処法がわかりましたので、記述しておきます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">構文エラーの原因</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/06/shutterstock_1433996435-min-1024x683.jpg" alt="エラー" class="wp-image-2885"/></figure>
</div>


<p class="is-style-big_icon_caution">原因は[[などのテストコマンドで変な値が入っている事によるエラーでした。</p>



<p>今回は変数展開するとif [[ 9 while_read.txt -lt 10 ]]といった構文になりエラーが起こっていました。</p>



<p>なぜこんな値が入っていたかというと<span class="swl-inline-color has-swl-deep-01-color">「wc -l」コマンドの仕様</span>が原因でした。</p>



<h2 class="wp-block-heading">構文エラーの解決策</h2>



<p class="is-style-big_icon_check">解決策は[[などのテストコマンドの値を修正する事でした。</p>



<p>「wc -l ファイル名」はファイルの行数とファイル名まで変数にいれてしまいます。</p>



<p>なので下のように変更したら解決しました</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>変更前と変更後</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>変更前：row_count=$(wc -l $file)</li>



<li>変更後：row_count=$(cat $file | wc -l)</li>
</ul>
</div></div>



<p>これで変数には行数のみの値が入ります。</p>



<h2 class="wp-block-heading">実際のシェルスクリプト</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="580" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-3-1024x580.jpg" alt="code" class="wp-image-4189" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-3-1024x580.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-3-300x170.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-3-768x435.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-3.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>file=&#39;while_read.txt&#39;
row_count=$(wc -l $file)
echo 終了するにはqを押してください

while :
 do
 read -p &quot;ファイルの何行目を表示させますか？&quot; my_row
  if [[ $row_count -lt $my_row ]]; then
   echo $my_row行目に文字はありません
   continue
  elif [[ $my_row == q ]]; then
   echo 終了します
   break
  else
   sed -n ${my_row}p $file
  fi
 done</code></pre></div>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<p>このシェルスクリプトでの原因は2行目の「wc -l ファイル名」のコマンドでファイルの行数を数えるものです。</p>



<p>数えた値を変数に入れると思っていましたが、実際は「値 ファイル名」とファイル名が入ってきます。</p>



<p>8行目でこの数字を使用して場合分けしたかったですが、変数に数字と不要なファイル名もはいっていた為に起こったエラーでした。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shell-script-error-mukounakeisannennzanshi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】readでユーザーが指定したものを使用する方法</title>
		<link>https://sugublog.org/shell-script-read-while/</link>
					<comments>https://sugublog.org/shell-script-read-while/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Tue, 21 Nov 2023 15:51:53 +0000</pubDate>
				<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[read]]></category>
		<category><![CDATA[while read]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=5965</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-1024x682.jpg" class="webfeedsFeaturedVisual" /></p>シェルスクリプトのread]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/11/DB_1114-5-1024x682.jpg" class="webfeedsFeaturedVisual" /></p>
<p>シェルスクリプトでユーザーが入力したものを使用したいと思った事はありませんか？</p>



<p>ユーザーの入力したものを使用する事で、非常にインタラクティブなスクリプトが完成します。</p>



<p><span class="swl-marker mark_orange"><strong>シェルスクリプト</strong>では<strong><span class="swl-inline-color has-swl-deep-01-color">read</span></strong>を使用すれば可能です。</span></p>



<p>入力したものによって場合分けなども出来ます。そういった事を今回行います。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<p><span class="swl-marker mark_blue">最後に<strong><span class="swl-inline-color has-swl-deep-02-color">業務でも使用できるシェルスクリプト</span></strong>も紹介するので、最後までご覧ください。</span></p>



<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトのreadでユーザーが入力したものを使用する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="683" src="https://sugublog.org/wp-content/uploads/2021/11/listen_11-3-1024x683.jpg" alt="ユーザーが入力" class="wp-image-4471" srcset="https://sugublog.org/wp-content/uploads/2021/11/listen_11-3-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/listen_11-3-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/listen_11-3-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/listen_11-3.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">readコマンドの基礎</h3>



<p>シェルスクリプトの<strong><span class="swl-inline-color has-swl-deep-01-color">readコマンドの基礎</span></strong>を以下に示します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>read 変数</code></pre></div>



<p><strong>readの後に変数名</strong>を指定します。この行に来るとユーザーの入力待ちになります。</p>



<p>入力された文字列などが変数に格納されて、続きのスクリプトが実行されます。</p>



<h3 class="wp-block-heading">readを使用したスクリプト説明</h3>



<p>では実際のシェルスクリプトでreadを使用してみましょう！</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 文字列を入力してください
read string
echo あなたが入力した文字は$stringです。</code></pre></div>



<p>echoで入力を促します。そして2行目で「read string」にしてユーザーが入力したものを変数stringに入れるようにしまう。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/school_08-3-300x188.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-echo/">【シェルスクリプト基礎】echoコマンドの使い方！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトのechoコマンドの使い方で疑問に思っている事などないでしょうか？ 思い通りに文字列を表示できなかったりしないでしょうか？ シェルスクリプトでecho&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p>3行目で変数stringに$をつけて変数展開しています。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-3-300x232.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-dollar-mean/">【シェルスクリプト】「$」の意味を詳しく解説！実例あり</a>
						<span class="p-blogCard__excerpt">シェルスクリプトで「$」はよく出てきますが、どういう意味なのかわからないと言った事はないでしょうか？ シェルスクリプトで「$」はよく出てきますが、どういう意味な&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p>表示させる文字列と変数を結合する方法は、そのままくっつけて記述すればOKです。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-4-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-screipt-base-combine-strings/">【シェルスクリプト基礎】文字列を結合するには？改行、スペースなども結合</a>
						<span class="p-blogCard__excerpt">シェルスクリプトで文字列を結合したい場合などのやり方をまとめます。 変数と文字列の結合や改行、スペース、空白などを含めた結合、また引数と文字列なども結合してい&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h3 class="wp-block-heading">read基礎を実践</h3>



<p>では<span class="swl-marker mark_orange">この<strong>read</strong>を使用した<strong>シェルスクリプト</strong>を<strong>実行</strong>してみます。</span></p>



<p>シェルスクリプトを実行するやり方は様々ありますが、「. シェルスクリプト名」で実行します。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-2-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-execution/">【シェルスクリプト基礎】コマンドを実行する様々な方法をご紹介！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトを実行する時に困った事はありませんか？ シェルスクリプトのコマンド実行での失敗メッセージ一覧 「実行権限がありません」 「コマンドが見つかりませ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>文字列を入力してください</code></pre></div>



<p>1行目の文字列が表示されています。2行目でユーザーの入力待ちになっています。今回は「test」と入力してエンターします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>あなたが入力した文字はtestです。</code></pre></div>



<p>きちんと<span class="swl-marker mark_orange">入力した値が入った文字列</span>が表示されています。</p>



<h2 class="wp-block-heading">readとifを使用して場合分けをしてみる</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/07/pixta_77773496_M-1024x791.jpg" alt="選択する" class="wp-image-3635"/><figcaption class="wp-element-caption">readとifで選択する</figcaption></figure>
</div>


<p>では<span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">read</span></strong>と<strong><span class="swl-inline-color has-swl-deep-01-color">if</span></strong>を使用して、ユーザーが入力したもので処理を分けてみます。</span></p>



<p>シェルスクリプトでifを使用して複数条件を指定する基礎は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>if 条件１
 条件１にマッチした処理
elif 条件２
 条件２にマッチした処理
else その他
 どれにも当てはまらなかった処理
fi</code></pre></div>



<p>です。「elif」を増やしていく事で更なる条件分岐が出来ます。</p>



<p>ではreadとifを組み合わせて、以下のシェルスクリプトを作成してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 1,2,3のうちどれかを入力してください
read input
 if [[ $input == 1 ]]; then
  echo 1を選んだ処理を書く
 elif [[ $input == 2 ]]; then
  echo 2を選んだ処理を書く
 elif [[ $input == 3 ]]; then
  echo 3を選んだ処理を書く
 else
  echo その他の処理を書く
fi</code></pre></div>



<h3 class="wp-block-heading">readとifのシェルスクリプト説明</h3>



<p>1行目のechoで説明文を表示して入力を促しています。2行目のreadでユーザーの入力したものを変数「input」に入れます。</p>



<p>3行目からifとreadで入力した数字で処理を分けています。1なら初めの処理、２なら次の処理、３なら3番目の処理、それ以外を選べばその他の処理が実行されます。</p>



<h3 class="wp-block-heading">readとifのシェルスクリプト実行</h3>



<p>ではこのread,ifのシェルスクリプトを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1,2,3のうちどれかを入力してください</code></pre></div>



<p>ここで入力待ちになります。1を入力してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1を選んだ処理を書く</code></pre></div>



<p>１の処理が実行されてシェルスクリプトが終わりました。</p>



<p>では次は「test」と文字列を入力してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>その他の処理を書く</code></pre></div>



<p>どの条件にも当てはまらずelseの処理が表示されました。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">実践：readとwhileを使用した実務でも使えるシェルスクリプト</h2>


<div class="wp-block-image is-style-border">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="512" src="https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2-1024x512.jpg" alt="traning" class="wp-image-4542" srcset="https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2-1024x512.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2-300x150.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2-768x384.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/programing_shool1121-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p>では最初のシェルスクリプトを<span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">while</span></strong>と<strong><span class="swl-inline-color has-swl-deep-01-color">関数</span></strong>を使用して、<strong>実践でも使用できる業務レベル</strong>まで引き上げます。</span></p>



<p>最初に実行したシェルスクリプトは入力した文字を表示するものでした。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo 文字列を入力してください
read string
echo あなたが入力した文字は$stringです。</code></pre></div>



<p class="is-style-big_icon_caution">しかし何も入力しないでも「あなたが入力した文字はです。」と表示されます。</p>



<p>これでは実務では使用できません。</p>



<h3 class="wp-block-heading">実践でも使用できる業務レベルのシェルスクリプト</h3>



<p>これをユーザーが入力するまで繰り返しヒアリングするシェルスクリプトに変更してみましょう！</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>#関数を使用します
function string_input(){
echo 文字列を入力してください
read string
}
#whileで変数の値が0の場合は関数に戻り続けます。変数が入力されたら抜けます。
while [[ -z $string ]]
do
 string_input
done
 echo あなたが入力した文字は$stringです。</code></pre></div>



<p>業務で使用するシェルスクリプトは、後から誰が見てもわかるようにコメントアウトして説明文をつけましょう！</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/school_08-2-300x200.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/syell-script_comment_out/">【シェルスクリプト基礎】コメントアウトのやり方！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトでコメントを入れたいけど入れ方がわからない。 また複数行コメントアウトできればやりたいといった要望はあると思います。 そこで今回はシェルスクリ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h3 class="wp-block-heading">業務レベルのシェルスクリプト説明</h3>



<p>functionで関数を作成しています。｛｝で囲った処理を呼び出す事が出来ます。</p>



<p>function名を「string_input」として文字列を入力させる処理を記述しています。</p>



<p>whileで変数「string」の文字列が0の場合は関数「string_input」を呼び出すようにしています。</p>



<p>これでユーザー入力が空白であれば、入力処理に戻る事が可能です。</p>



<p>入力されればwhileの繰り返しを抜けて、文字列を表示してシェルスクリプトが終了します。</p>



<h3 class="wp-block-heading">業務レベルのシェルスクリプト実行</h3>



<p>ではこのシェルスクリプトを実行して、<span class="swl-marker mark_yellow">何も入力せずにエンターを何回か押してみます</span>。<span class="swl-marker mark_green">その後「test」と入力</span>してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>文字列を入力してください

文字列を入力してください

文字列を入力してください
test
あなたが入力した文字はtestです。</code></pre></div>



<p><span class="swl-marker mark_yellow">何度も入力を促されて</span>、<span class="swl-marker mark_green">文字を入力すると想定の文字列が表示</span>されました。</p>



<p class="has-border -border02">シェルスクリプトでreadを自分のモノにすれば、一層楽しくなるので極めてみてください。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shell-script-read-while/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【シェルスクリプト】for文で回数の指定方法！エラー対処法あり</title>
		<link>https://sugublog.org/shellscript-for-number-of-times/</link>
					<comments>https://sugublog.org/shellscript-for-number-of-times/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Mon, 20 Nov 2023 12:40:59 +0000</pubDate>
				<category><![CDATA[シェルスクリプト]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[回数]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=5924</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/html-007-5-1024x513.jpg" class="webfeedsFeaturedVisual" /></p>シェルスクリプトの繰り返しでforを使用する時に、ループする回数の指定方法をまとめます。 そういった疑問に答えます。 シェルスクリプトのfor文で回数の指定方法 シェルスクリプトのfor文の基本構文と使い方 シェルスクリ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/html-007-5-1024x513.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong>シェルスクリプト</strong>の繰り返しで<strong>for</strong>を使用する時に、<strong><span class="swl-inline-color has-swl-deep-01-color">ループする回数の指定方法</span></strong>をまとめます。</p>


<div class="swell-block-balloon"><div class="c-balloon -bln-left" data-col="blue"><div class="c-balloon__icon -square"><img decoding="async" src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-src="https://sugublog.org/wp-content/uploads/2021/02/cropped-dog003-150x150.png" alt="" class="lazyload c-balloon__iconImg" width="80px" height="80px"><noscript><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/02/cropped-dog003-150x150.png" alt="" class="c-balloon__iconImg" width="80px" height="80px"></noscript><span class="c-balloon__iconName">シェルスクリプトのforで繰り返し回数の指定方法を知りたい犬</span></div><div class="c-balloon__body -thinking -border-on"><div class="c-balloon__text">
<p>シェルスクリプトでfor文を使いたいけど、回数の指定方法がわかりません。</p>
<span class="c-balloon__shapes"><span class="c-balloon__before"></span><span class="c-balloon__after"></span></span></div></div></div></div>


<p>そういった疑問に答えます。</p>


<div class="p-blogParts post_content" data-partsID="5030">
<p>windowsのプロンプトで使用できるbatやpythonやphpを使用して、業務効率化やWebサイトを作成しております。javaやシェルスクリプトなど、様々なプログラミングを行った実績ありの筆者です。</p>
</div>


<script async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle ads" style="display:block; text-align:center;" data-ad-layout="in-article" data-ad-format="fluid" data-ad-client="ca-pub-9330904718533231" data-ad-slot="6086594686"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">シェルスクリプトのfor文で回数の指定方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="676" src="https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1024x676.jpg" alt="回数指定方法" class="wp-image-4185" srcset="https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-1024x676.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-300x198.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1-768x507.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/code_0923-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">シェルスクリプトのfor文の基本構文と使い方</h3>



<p><strong>シェルスクリプト</strong>の<strong>for</strong>文を使った<strong>繰り返し</strong>の基礎は以下になります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for 変数 in 変数に入れるリストなど
 do
  繰り返す処理
 done</code></pre></div>



<h3 class="wp-block-heading">for文を使ったカウントアップの方法</h3>



<p>for文の<strong><span class="swl-inline-color has-swl-deep-01-color">回数指定</span></strong>の基本は以下です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for 変数 in {1..9}
 do
  繰り返す処理
 done</code></pre></div>



<p>｛1..9｝は1から9まで順番に変数に入れていきます。この場合の回数は9になります。</p>



<h3 class="wp-block-heading">forの回数指定の基本実践</h3>



<p>以下のfor文のシェルスクリプトを記述してください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in {1..9}
do
 echo 回数指定で$i回繰り返しています
done</code></pre></div>



<p>＄iで変数iに入った値を展開しています。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-3-300x232.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-dollar-mean/">【シェルスクリプト】「$」の意味を詳しく解説！実例あり</a>
						<span class="p-blogCard__excerpt">シェルスクリプトで「$」はよく出てきますが、どういう意味なのかわからないと言った事はないでしょうか？ シェルスクリプトで「$」はよく出てきますが、どういう意味な&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p>echoで文字列を表示します。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/school_08-3-300x188.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-echo/">【シェルスクリプト基礎】echoコマンドの使い方！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトのechoコマンドの使い方で疑問に思っている事などないでしょうか？ 思い通りに文字列を表示できなかったりしないでしょうか？ シェルスクリプトでecho&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p>変数や文字列などを結合する場合は、特に何もせず文字などをつなげれば問題ありません。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/09/randam_0915-4-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-screipt-base-combine-strings/">【シェルスクリプト基礎】文字列を結合するには？改行、スペースなども結合</a>
						<span class="p-blogCard__excerpt">シェルスクリプトで文字列を結合したい場合などのやり方をまとめます。 変数と文字列の結合や改行、スペース、空白などを含めた結合、また引数と文字列なども結合してい&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h3 class="wp-block-heading">forの回数指定の基本実践結果</h3>



<p>ではこのシェルスクリプトを実行してみます。今回は「. シェルスクリプト名」で実行します。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/08/script_0809-2-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shell-script-execution/">【シェルスクリプト基礎】コマンドを実行する様々な方法をご紹介！</a>
						<span class="p-blogCard__excerpt">シェルスクリプトを実行する時に困った事はありませんか？ シェルスクリプトのコマンド実行での失敗メッセージ一覧 「実行権限がありません」 「コマンドが見つかりませ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p>結果は9回実行されています。</p>


<div class="wp-block-image is-style-desktop">
<figure class="aligncenter size-full"><img decoding="async" width="599" height="165" src="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-1-9.png" alt="shellscript-forの実行結果" class="wp-image-5928" srcset="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-1-9.png 599w, https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-1-9-300x83.png 300w" sizes="(max-width: 599px) 100vw, 599px" /><figcaption class="wp-element-caption">shellscript-for-1-9の実行結果</figcaption></figure>
</div>


<h3 class="wp-block-heading">シェルスクリプトで日本語が文字化けする場合</h3>



<p class="is-style-big_icon_caution">シェルスクリプトを実行した結果、文字化けする場合があります。</p>


<div class="wp-block-image is-style-desktop">
<figure class="aligncenter size-full"><img decoding="async" width="580" height="363" src="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-count-日本語文字化け.png" alt="shellscriptで日本語文字化けした結果" class="wp-image-5936" srcset="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-count-日本語文字化け.png 580w, https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-count-日本語文字化け-300x188.png 300w" sizes="(max-width: 580px) 100vw, 580px" /><figcaption class="wp-element-caption">shellscriptで日本語文字化けした結果</figcaption></figure>
</div>


<p>この場合は文字コードが<span class="swl-bg-color has-swl-deep-01-background-color">「SJIS」</span>などになっています。<span class="swl-bg-color has-swl-deep-03-background-color">「UTF-8」</span>に変更しましょう。</p>



<h3 class="wp-block-heading">seqコマンドを使った回数指定の方法</h3>



<p><strong>「seq」</strong>でも<strong>回数指定可能</strong>です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in `seq 1 9`
do
 echo seqで$i回繰り返しています
done</code></pre></div>



<h3 class="wp-block-heading">seqコマンドを使った回数指定の方法実践</h3>



<p>seqを使用して実行してみます。</p>


<div class="wp-block-image is-style-desktop">
<figure class="aligncenter size-full"><img decoding="async" width="481" height="162" src="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-seq-1-9-1.png" alt="shellscript-for-seqの実行結果" class="wp-image-5933" srcset="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-seq-1-9-1.png 481w, https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-seq-1-9-1-300x101.png 300w" sizes="(max-width: 481px) 100vw, 481px" /><figcaption class="wp-element-caption">shellscript-for-seqの実行結果</figcaption></figure>
</div>


<h3 class="wp-block-heading">seqコマンドを使った時のエラー結果</h3>



<p>seqを使用する時のよくある<span class="swl-bg-color has-swl-deep-01-background-color">エラー</span>を紹介しておきます。</p>



<p>以下のシェルスクリプトを実行して見て下さい。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in seq 1 9
do
 echo seqで$i回繰り返しています
done</code></pre></div>



<p>「`」が抜けていて「seq」「1」「9」と3つの文字を順番にいれています。</p>


<div class="wp-block-image is-style-desktop">
<figure class="aligncenter size-full"><img decoding="async" width="399" height="58" src="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-seq-1-9-エラー.png" alt="" class="wp-image-5934" srcset="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-seq-1-9-エラー.png 399w, https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-seq-1-9-エラー-300x44.png 300w" sizes="(max-width: 399px) 100vw, 399px" /><figcaption class="wp-element-caption">shellscript-for-seq-1-9-エラーの実行結果</figcaption></figure>
</div>


<p>意図しない結果です。<span class="swl-marker mark_yellow">「`」をつけ忘れないようにしましょう！</span></p>



<p class="is-style-icon_pen">「`」はキーボードのShift＋＠で入力できます。</p>



<h3 class="wp-block-heading">回数指定を(())で行う方法</h3>



<p>最後は(())を使用して<strong>回数</strong>を指定します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for ((i=1; i&lt;9; i++))
do
 echo &quot;(())&quot;で$i回繰り返しています
done</code></pre></div>



<p>このシェルスクリプトは((初期値; 条件; 次の値))で指定しており、初期値が1で「i++」がiに1を加算していき、iが9になれば終了となります。</p>



<p>これで回数を8回にすることができます。ではシェルスクリプトを実行します。</p>


<div class="wp-block-image is-style-browser_mac">
<figure class="aligncenter size-full"><img decoding="async" width="450" height="146" src="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-1-9-1.png" alt="shellscript-for" class="wp-image-5946" srcset="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-1-9-1.png 450w, https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-1-9-1-300x97.png 300w" sizes="(max-width: 450px) 100vw, 450px" /></figure>
</div>


<p>結果回数は想定通り８回となっています。</p>



<h2 class="wp-block-heading">回数指定を配列で行う方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="576" src="https://sugublog.org/wp-content/uploads/2021/08/programing_0812-11-1024x576.jpg" alt="配列" class="wp-image-3959" srcset="https://sugublog.org/wp-content/uploads/2021/08/programing_0812-11-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-11-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-11-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/programing_0812-11.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">配列の使い方と書き方</h3>



<p>配列の基本的な書き方は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>array=(1 2 3 4 5 6 7 8 9)</code></pre></div>



<p>配列名に「=()」をつけて、その中に配列に入れたい文字などを順に入れていきます。</p>



<h3 class="wp-block-heading">回数指定を配列で行う時の構文</h3>



<p><strong>for</strong>で<strong>回数を指定</strong>するのに<strong><span class="swl-inline-color has-swl-deep-01-color">配列</span></strong>を使用する時の構文</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in ${array[@]}</code></pre></div>



<p class="is-style-icon_book">シェルスクリプトのfor文で配列を使用する方法は、下の記事で詳しく説明しています。</p>


<div class="swell-block-postLink">			<div class="p-blogCard -internal" data-type="type1" data-onclick="clickLink">
				<div class="p-blogCard__inner">
					<span class="p-blogCard__caption">あわせて読みたい</span>
					<div class="p-blogCard__thumb c-postThumb"><figure class="c-postThumb__figure"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/10/table_20211010-1-300x169.jpg" alt="" class="c-postThumb__img u-obf-cover" width="320" height="180"></figure></div>					<div class="p-blogCard__body">
						<a class="p-blogCard__title" href="https://sugublog.org/shellscript-for-array/">【シェルスクリプト】for文のループ処理を配列で行う方法</a>
						<span class="p-blogCard__excerpt">シェルスクリプトのループでfor文を使用しますが、順に入れる文字列が複雑なので配列で指定したい事はないでしょうか？ そういった場合の処理のやり方を、実践していき&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h3 class="wp-block-heading">回数指定を配列で行う実践</h3>



<p>では<strong>回数指定</strong>を<strong><span class="swl-inline-color has-swl-deep-01-color">配列</span></strong>で行う以下のシェルスクリプトを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>array=(1 2 3 4 5 6 7 8 9)
for i in ${array[@]}
do
 echo 配列で$i回繰り返しています
done</code></pre></div>



<h3 class="wp-block-heading">回数指定を配列で行った結果</h3>


<div class="wp-block-image is-style-browser_mac">
<figure class="aligncenter size-full"><img decoding="async" width="582" height="168" src="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-hairetsu-1-9.png" alt="shellscript-for-配列-1-9の実行結果" class="wp-image-5930" srcset="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-hairetsu-1-9.png 582w, https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-hairetsu-1-9-300x87.png 300w" sizes="(max-width: 582px) 100vw, 582px" /></figure>
</div>


<p>回数指定を配列で行い成功しています。</p>



<h2 class="wp-block-heading">回数指定をファイルを使用して行う方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="768" src="https://sugublog.org/wp-content/uploads/2021/08/DB0804-1-1024x768.jpg" alt="ファイル" class="wp-image-3840" srcset="https://sugublog.org/wp-content/uploads/2021/08/DB0804-1-1024x768.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/DB0804-1-300x225.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/DB0804-1-768x576.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/DB0804-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong>ファイルの中身</strong>を取得して<strong>回数指定</strong>してみます。以下のシェルスクリプトを記述します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in `cat shellscript-for-count.txt`
do
 echo ファイルから取得$i回目
done</code></pre></div>



<p>同階層に「shellscript-for-count.txt」を作成して中身を以下のように記述します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>1
2
3
4
5
6
7
8
9</code></pre></div>



<p>これで先程のシェルスクリプトを実行して見ます。</p>


<div class="wp-block-image is-style-desktop">
<figure class="aligncenter size-full"><img decoding="async" width="415" height="164" src="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-file.png" alt="シェルスクリプトでforの回数指定をファイルに記述した結果" class="wp-image-5939" srcset="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-file.png 415w, https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-file-300x119.png 300w" sizes="(max-width: 415px) 100vw, 415px" /><figcaption class="wp-element-caption">シェルスクリプトでforの回数指定をファイルに記述した結果</figcaption></figure>
</div>


<p>きちんと回数指定をファイルから取得しています。</p>



<h2 class="wp-block-heading">応用編：回数をループの制御で行う方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/07/pixta_77773496_M-1024x791.jpg" alt="選択する" class="wp-image-3635"/><figcaption class="wp-element-caption">Business person stand on road fork with hard and easy directions. Choice way isometric</figcaption></figure>
</div>


<p>では回数を指定するが途中で制御を行ってみます。</p>



<h3 class="wp-block-heading">continueやbreakコマンドでループをスキップしたり終了する方法</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in {1..9}
do
 if [[ $i -eq 5 ]]; then
  continue
 elif [[ $i -eq 8 ]]; then
  break
 fi
 echo $i回目：5は飛ばす、8なら終了
done</code></pre></div>



<p>forの回数指定で9回繰り返します。その中でif文により場合分けしています。</p>



<p>5回目の時は<span class="swl-inline-color has-swl-deep-02-color">「continue」</span>で<span class="swl-bg-color has-swl-deep-02-background-color">スキップ</span>し、8回目の時は<span class="swl-inline-color has-swl-deep-03-color">「break」</span>で<span class="swl-bg-color has-swl-deep-03-background-color">処理を抜け</span>ています。</p>


<div class="wp-block-image is-style-desktop">
<figure class="aligncenter size-full"><img decoding="async" width="476" height="110" src="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-break-continue.png" alt="shellscript-for-break-continueの実行結果" class="wp-image-5929" srcset="https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-break-continue.png 476w, https://sugublog.org/wp-content/uploads/2023/11/shellscript-for-break-continue-300x69.png 300w" sizes="(max-width: 476px) 100vw, 476px" /><figcaption class="wp-element-caption">shellscript-for-break-continueの実行結果</figcaption></figure>
</div>


<p>実行した結果、5番目がスキップされ、7番目までで終了しています。</p>



<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9330904718533231"
     crossorigin="anonymous"></script>
<ins class="adsbygoogle"
     style="display:block"
     data-ad-format="autorelaxed"
     data-ad-client="ca-pub-9330904718533231"
     data-ad-slot="8455594968"></ins>
<script>
     (adsbygoogle = window.adsbygoogle || []).push({});
</script>



<h2 class="wp-block-heading">まとめ：シェルスクリプトのfor文で回数の指定方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="522" src="https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10-1024x522.jpg" alt="繰り返し回数を指定する" class="wp-image-4417" srcset="https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10-1024x522.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10-300x153.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10-768x392.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/Server_20211109-10.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading">シェルスクリプトのfor文の基本構文と使い方</h3>



<p>シェルスクリプトの<strong><span class="swl-inline-color has-swl-deep-01-color">for文を使った繰り返しの基礎</span></strong>は以下になります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for 変数 in 変数に入れるリストなど
 do
  繰り返す処理
 done</code></pre></div>



<h3 class="wp-block-heading">for文を使ったカウントアップの方法</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for 変数 in {1..9}</code></pre></div>



<h3 class="wp-block-heading">seqコマンドを使った回数指定の方法</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in `seq 1 9`</code></pre></div>



<p class="is-style-icon_pen">「`」をつけ忘れないよう気を付ける。</p>



<h3 class="wp-block-heading">回数指定を(())で行う方法</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for ((i=1; i&lt;9; i++))</code></pre></div>



<h3 class="wp-block-heading">回数指定を配列で行う時の構文</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in ${array[@]}</code></pre></div>



<h3 class="wp-block-heading">回数指定をファイルを使用して行う方法</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in `cat shellscript-for-count.txt`</code></pre></div>



<h3 class="wp-block-heading">continueやbreakコマンドでループをスキップしたり終了する方法</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>for i in {1..9}
do
 if [[ $i -eq 5 ]]; then
  continue
 elif [[ $i -eq 8 ]]; then
  break
 fi
 echo $i回目：5は飛ばす、8なら終了
done</code></pre></div>



<p>シェルスクリプトのforで繰り返し回数を指定する方法を、実践し画像を使用してわかりやすく説明しました！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/shellscript-for-number-of-times/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
