<?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/category/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://sugublog.org</link>
	<description>ブログ運営について発信中</description>
	<lastBuildDate>Sun, 29 Mar 2026 15:26:41 +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>【脱・cmd】バッチファイルからPowerShellへ！</title>
		<link>https://sugublog.org/powershell-beginner-guide/</link>
					<comments>https://sugublog.org/powershell-beginner-guide/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Sun, 29 Mar 2026 15:17:29 +0000</pubDate>
				<category><![CDATA[bat]]></category>
		<category><![CDATA[IT]]></category>
		<category><![CDATA[Powershell]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[プログラミング]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=7017</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2026/03/Gemini_Generated_Image_4falkt4falkt4fal-1024x572.png" class="webfeedsFeaturedVisual" /></p>エンジニアのための入門・書き換えガイド プログラムを実践してきた筆者が、基本構文から実務で使える便利コマンドまで徹底解説します。 なぜバッチファイルからPowerShellなのか 「あぁ、また文字化けか……」 Windo [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2026/03/Gemini_Generated_Image_4falkt4falkt4fal-1024x572.png" class="webfeedsFeaturedVisual" /></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>


<h2 class="wp-block-heading">なぜバッチファイルからPowerShellなのか</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="853" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-1024x853.jpg" alt="教師" class="wp-image-4809" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-1024x853.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-300x250.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6-768x640.jpg 768w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-6.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>「あぁ、また文字化けか……」</p>



<p>Windowsエンジニアなら誰もが一度は、メモ帳で書いたバッチファイル（.bat）を叩いた瞬間に真っ黒な画面で暴れる「謎の記号」に頭を抱えたことがあるはずです。</p>



<p class="is-style-big_icon_hatena">ファイル名に日付を入れてバックアップを取りたいだけなのに、%date:~0,4%%date:~5,2%… といった、まるで呪文のような文字列をググりながら必死に打ち込んだ経験はありませんか？</p>



<p>確かに、長年連れ添ったバッチファイルは手軽です。<br>しかし、現場のDX化が進み、クラウドやJSON、複雑なAPI連携が当たり前になった令和の今、「コマンドプロンプト（bat）」という武器だけでは、正直戦えなくなってきています。</p>



<p>「batで無理やり書けばなんとかなる」<br>その職人気質なこだわりが、実はあなたの貴重な残業時間を奪っているかもしれません。</p>



<p class="is-style-big_icon_point">そこでおすすめしたいのが、Windowsの標準シェルでありながら、圧倒的なパワーを秘めた<strong>「PowerShell」</strong>です。</p>



<p>「難しそう」「青い画面はとっつきにくい」<br>そう思って避けてきたあなたへ。</p>



<p>この記事では、IT現場の「泥臭い自動化」を支えてきたエンジニアの視点で、<strong>バッチファイルで消耗していたあの日々を過去にする「PowerShellの最短攻略法」</strong>を解説します。</p>



<p>この記事を読み終える頃には、あなたは「.bat」を右クリックして編集するのをやめ、自信を持って「.ps1」を作り始めているはずです。</p>



<ul class="wp-block-list">
<li><strong>なぜ今、PowerShellなのか？</strong>
<ul class="wp-block-list">
<li>Windows 10/11の標準シェルがPowerShellへ移行している現状。</li>



<li>bat（コマンドプロンプト）では難しかった「複雑な条件分岐」や「JSON/XML操作」が容易になるメリット。</li>
</ul>
</li>



<li><strong>この記事で学べること</strong>
<ul class="wp-block-list">
<li>PowerShellの起動と実行ポリシーの設定。</li>



<li>batファイルとの書き方の違い（比較表）。</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading"><strong>&nbsp;準備：実行ポリシーの設定（最初につまずくポイント）</strong></h2>



<figure class="wp-block-image 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>



<p>新しくスクリプトを学ぶ時に全く別の箇所でつまずき挫折することはよくあります。なのでまずはPowershellで最初につまずくポイントを整理しておきます。</p>



<div class="swell-block-capbox cap_box"><div class="cap_box_ttl"><span>Powershellで最初につまずくポイント</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>PowerShellはデフォルトではスクリプト（.ps1）が実行できない仕様。</li>



<li>Set-ExecutionPolicy コマンドの紹介。RemoteSigned への変更手順をコマンド例とともに解説。</li>
</ul>
</div></div>



<h3 class="wp-block-heading">PowerShellはデフォルトではスクリプト（.ps1）が実行できない仕様</h3>



<p>PowerShellの学習を始めた人が、真っ先にぶつかる「高い壁」。 それが、<strong><span class="swl-marker mark_orange"><span class="swl-inline-color has-swl-deep-01-color">「スクリプトが実行できません」という無慈悲な赤文字のエラー</span></span></strong>です。</p>



<p>「せっかく勉強しようと思ったのに、最初から拒否されるのか……」と、ここで挫折してしまうのは本当にもったいない！</p>



<p>実はこれ、PowerShellが「悪意のあるプログラムからあなたのPCを守るため」にあえてかけている「強力なセーフティ（安全装置）」なのです。バッチファイル（.bat）にはなかった、現代的なセキュリティの考え方ですね。</p>



<p>この安全装置を、開発に支障がない程度に「少しだけ緩める」のが、最初の一歩になります。</p>



<h3 class="wp-block-heading">実行ポリシーを「RemoteSigned」へ変更する</h3>



<p>実務で最もバランスが良い設定が <strong><code>RemoteSigned</code></strong> です。 「自分で書いたスクリプトは動かすけど、ネットから拾ってきた怪しいやつは署名がないと動かさないよ」という、まさにエンジニアのための設定です。</p>



<p>設定手順はたったの2ステップ。</p>



<ol start="1" class="wp-block-list">
<li><strong>PowerShellを「管理者として実行」で起動する</strong> （ここを忘れると、設定変更自体が拒否されます！）</li>



<li><strong>魔法のコマンドを打ち込む</strong></li>
</ol>



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



<p>コマンドを打つと、「実行ポリシーを変更しますか？」と聞かれますので、迷わず <strong><code>Y</code></strong>（または <code>A</code>）を押してエンター。これで、あなたのPCは「PowerShellを受け入れる準備」が整いました。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>【プロのワンポイントアドバイス】</strong> 「セキュリティを下げるのは怖い……」と思うかもしれませんが、ご安心を。この設定は、あくまで「スクリプトファイル（.ps1）を直接叩けるようにする」ためのもの。まずはここを突破しないと、PowerShellの真価を味わうことはできません。</p>
</blockquote>



<h2 class="wp-block-heading"><strong>【比較で覚える】bat vs PowerShell 基本構文</strong></h2>



<p>「コマンドプロンプト（bat）で培った知識は、もうゴミ箱行きなのか？」 いいえ、そんなことはありません。</p>



<p>PowerShellはバッチファイルの進化系です。多くのコマンド（<code>dir</code> や <code>cd</code>、<code>copy</code> など）が「エイリアス（別名）」として引き継がれているため、今までの操作感のまま、より強力な書き方ができるようになります。</p>



<p>まずは、最もよく使う「基本の型」を比較表でサクッと確認してみましょう。</p>



<p class="has-text-align-center is-style-balloon_box">bat vs PowerShell 基本構文</p>



<figure class="wp-block-table is-style-regular"><table><thead><tr><th><strong>項目</strong></th><th><strong>バッチファイル (.bat)</strong></th><th><strong>PowerShell (.ps1)</strong></th><th>ポイント</th></tr></thead><tbody><tr><th><strong>変数</strong></th><td>set VAR=value</td><td>$var = &#8220;value&#8221;</td><td>PSは頭に <code>$</code> を付けるだけ！</td></tr><tr><th><strong>出力</strong></th><td>echo Hello</td><td>Write-Host &#8220;Hello&#8221;</td><td><code>echo</code> でも動くが正式にはこれ</td></tr><tr><th><strong>コメント</strong></th><td>rem または ::</td><td>#</td><td>プログラミング言語に近い <code>#</code></td></tr><tr><th><strong>引数</strong></th><td>%1, %2</td><td>$args[0], $args[1]</td><td>0番目から始まる配列形式</td></tr><tr><th>日付の取得</th><td><code>%date%</code> (要整形)</td><td>Get-Date</td><td>オブジェクトとして高機能</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">実際のコードで見比べる「変数の扱い」</h3>



<p>バッチファイルで一番イライラするのは、変数を「%」で囲んだり、代入の時にスペースを空けてはいけなかったりする独特のルールですよね。PowerShellなら、もっと直感的に書けます。</p>



<h4 class="wp-block-heading">バッチファイルの場合</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>@echo off
set NAME=SuguBlog
echo Hello, %NAME%!
pause</code></pre></div>



<h4 class="wp-block-heading">PowerShellの場合</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># 変数に代入（スペースがあってもOK！）
$name = &quot;SuguBlog&quot;

# 文字列の中でそのまま展開できる
Write-Host &quot;Hello, ${name}!&quot;

# 画面を止めたい時は Read-Host
Read-Host &quot;Enterキーを押して終了してください...&quot;</code></pre></div>



<h3 class="wp-block-heading">なぜPowerShellの方が「楽」なのか？</h3>



<p>バッチファイルの場合、変数を連結したり計算したりするたびに <code>set /a</code> や複雑なエスケープ処理が必要でした。</p>



<p>しかし、<span class="swl-inline-color has-swl-deep-01-color"><span class="swl-marker mark_orange">PowerShellは「エンジニアが直感的に書きたいように書ける」ように設計されています。</span></span> 例えば、文字列の中で <code>$name</code> と書くだけで中身を表示してくれる「変数展開」のスマートさ。これだけでも、書き換えのストレスが半分以下になるはずです。</p>



<h2 class="wp-block-heading has-text-align-left">PowerShellの最大の特徴「オブジェクト」を理解する</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="944" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-1-1024x944.jpg" alt="パソコン教室" class="wp-image-4804" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-1-1024x944.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-1-300x277.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-1-768x708.jpg 768w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="swell-block-capbox cap_box"><div class="cap_box_ttl"><span>見出し</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>テキストではなく「モノ（オブジェクト）」としてデータを扱う考え方の解説。</li>



<li><strong>パイプライン（|）の強力さ</strong>
<ul class="wp-block-list">
<li>例：Get-ChildItem | Where-Object { $_.Length -gt 1MB }</li>



<li>（1MB以上のファイルを抽出する、といった直感的な操作例）</li>
</ul>
</li>
</ul>
</div></div>



<ul class="wp-block-list">
<li></li>
</ul>



<p>バッチファイルやLinuxのシェルを使っていると、コマンドの実行結果はただの「文字（テキスト）」として返ってきます。 そのため、特定のデータを取り出すには、複雑な <code>findstr</code> や <code>awk</code> を駆使して、文字を切り刻む必要がありました。</p>



<p class="is-style-icon_good">しかし、PowerShellは違います。 <strong>返ってくるのは文字ではなく、データが詰まった「オブジェクト（情報の塊）」</strong>なのです。</p>



<h3 class="wp-block-heading">「文字」ではなく「中身」で会話する</h3>



<p>例えば、ファイルのサイズを知りたいとき。 バッチファイルでは <code>dir</code> の結果から「何文字目から何文字目がサイズで……」とパズルをしていました。</p>



<h3 class="wp-block-heading">魔法の杖「パイプライン（|）」の真骨頂</h3>



<p class="is-style-icon_good">PowerShellなら、ファイルという「オブジェクト」に「ねぇ、サイズ（Length）だけ教えて？」と聞くだけで終わります。</p>



<p>この「オブジェクト」の真価を発揮するのが、おなじみの縦棒 <strong><code>|</code>（パイプライン）</strong> です。 PowerShellのパイプは、ただ結果を渡すだけではありません。「データの塊を、次のコマンドへ丸ごと放り投げる」役割を持っています。</p>



<h4 class="wp-block-heading">1MB以上のファイルだけを「スグ」に見つける例</h4>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>直感的なフィルタリング</p>
</blockquote>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># カレントディレクトリのファイル一覧を取得して、
# その中から「サイズが1MBより大きいもの」だけを選び出す
Get-ChildItem | Where-Object { $_.Length -gt 1MB }</code></pre></div>



<p>これ、バッチファイルで書こうとしたら何行必要か想像してみてください。 PowerShellなら、たった1行。「何を取得して（Get）」「どう分けるか（Where）」を繋げるだけで、複雑なロジックが完成します。</p>



<h3 class="wp-block-heading">「$_」という、ちょっと不思議な記号</h3>



<p>コードの中に出てきた <code>$_</code> という記号。最初は「何これ？」と思うかもしれませんが、これは「今、パイプラインを通っているそのデータ」を指す代名詞です。</p>



<p>「目の前のコイツの、サイズ（Length）を見て！」 そんな風にPCに指示を出しているイメージですね。</p>



<h2 class="wp-block-heading"><strong>実務で「スグ」使える逆引きレシピ 3選</strong></h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="770" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-1024x770.jpg" alt="パソコン教室" class="wp-image-4805" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-1024x770.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-300x226.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-768x577.jpg 768w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<div class="swell-block-capbox cap_box"><div class="cap_box_ttl"><span>見出し</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li><strong>① ファイルのバックアップ（日付付与）</strong>
<ul class="wp-block-list">
<li>Get-Date フォーマットを使ったファイル名生成。</li>
</ul>
</li>



<li><strong>② 特定の文字列を含むファイルの検索と抽出</strong>
<ul class="wp-block-list">
<li>Select-String の使い方。</li>
</ul>
</li>



<li><strong>③ CSVファイルの読み込みと加工</strong>
<ul class="wp-block-list">
<li>Import-Csv でデータをループ処理する方法。</li>
</ul>
</li>
</ul>
</div></div>



<ul class="wp-block-list">
<li></li>
</ul>



<p>「理屈はわかった。で、実際どう使うの？」 そんな声にお応えして、今日からあなたの現場で<strong><span class="swl-inline-color has-swl-deep-01-color">即戦力になる3つの鉄板レシピ</span></strong>を用意しました。バッチファイルでは苦労していたあの作業が、驚くほどスマートに片付きます。</p>



<h3 class="wp-block-heading">① ファイルのバックアップ（日付付与）</h3>



<p>ログファイルや設定ファイルを保存する際、「ファイル名_20240329.bak」のように日付を入れたいケースは多いですよね。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>日付付きコピーの決定版</p>
</blockquote>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># 今日の日付を「yyyyMMdd」形式で取得
$date = Get-Date -Format &quot;yyyyMMdd&quot;

# 元ファイルを日付付きでコピー
Copy-Item &quot;C:\logs\app.log&quot; &quot;C:\backup\app_$date.log&quot;</code></pre></div>



<p class="is-style-icon_good"><strong>【ここがスゴイ！】</strong> バッチファイルのように <code>%date:~0,4%</code> といった複雑な切り出しは不要。<code>-Format</code> を指定するだけで、あなたが欲しい形の日付が手に入ります。</p>



<h3 class="wp-block-heading">② 特定の文字列を含むファイルを一括検索</h3>



<p>「あの設定値、どのファイルに書いたっけ？」 そんな時は <code>Select-String</code> の出番です。Linuxの <code>grep</code> に近い感覚で使えます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># 「Error」という文字が含まれる .txt ファイルをサブフォルダまで検索
Get-ChildItem -Recurse *.txt | Select-String &quot;Error&quot;</code></pre></div>



<p class="is-style-icon_good"><strong>【ここがスゴイ！】</strong> <code>-Recurse</code> をつけるだけで、サブフォルダまで根こそぎ探してくれます。結果には「行番号」も表示されるので、修正作業が爆速になります。</p>



<h3 class="wp-block-heading">③ CSVファイルの読み込みと加工</h3>



<p>Excelで管理しているリストを元に、フォルダを一括作成したり設定を変更したりする場合、PowerShellは最強のツールになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># CSVを読み込んで、1行ずつ処理する
Import-Csv &quot;C:\data\user_list.csv&quot; | ForEach-Object {
    # 「UserName」列の値を使ってフォルダを作成
    New-Item -Path &quot;C:\Users\Desktop&quot; -Name $_.UserName -ItemType Directory
}</code></pre></div>



<p class="is-style-icon_good"><strong>【ここがスゴイ！】</strong> <code>Import-Csv</code> を使うと、CSVのヘッダー名をそのまま変数として扱えます。文字割りの処理を自分で書く必要はもうありません。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">【＋α】さらに一歩先へ：Active Directory（AD）連携</h3>



<p>もしあなたが社内インフラや情シスの担当者なら、PowerShellは「知っておかなければならない武器」に変わります。</p>



<p>例えば、**「期限切れ間近のユーザーアカウントを抽出する」**といった作業。 GUI（マウス操作）で一人ずつ確認していたら日が暮れますが、PowerShell（Active Directoryモジュール）を使えば一瞬です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code># 30日以内にパスワードが切れるユーザーを一覧表示
Search-ADAccount -PasswordExpiring -TimeSpan 30.00:00:00 | Select-Object Name, SamAccountName</code></pre></div>



<p>こうした「AD連携」や「サーバー構築の自動化」こそが、PowerShellの本領発揮。 まずは日々のファイル操作から慣れていき、徐々にこうした高度な自動化に挑戦していきましょう！</p>



<h2 class="wp-block-heading">まとめ：小さな一歩が「エンジニアの自由」を作る</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="572" src="https://sugublog.org/wp-content/uploads/2026/03/Gemini_Generated_Image_4falkt4falkt4fal-1024x572.png" alt="バッチファイル（.bat）からPowerShell（.ps1）への移行をイメージした比較画像。左側には古いMS-DOS風の画面と手作業のファイル、右側にはPowerShellのコード（Get-DateやWhere-Object）と自動化されたデータパイプラインが描かれ、「バッチで消耗していませんか？PowerShellで『自由』を手に入れよう！」というキャッチコピーが入ったスグブログのアイキャッチ画像" class="wp-image-7022" srcset="https://sugublog.org/wp-content/uploads/2026/03/Gemini_Generated_Image_4falkt4falkt4fal-1024x572.png 1024w, https://sugublog.org/wp-content/uploads/2026/03/Gemini_Generated_Image_4falkt4falkt4fal-300x167.png 300w, https://sugublog.org/wp-content/uploads/2026/03/Gemini_Generated_Image_4falkt4falkt4fal-768x429.png 768w, https://sugublog.org/wp-content/uploads/2026/03/Gemini_Generated_Image_4falkt4falkt4fal.png 1376w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">バッチファイルの限界を感じていませんか？PowerShellなら、たった1行のコードで複雑な自動化をスマートに実現できます。</figcaption></figure>



<div class="swell-block-capbox cap_box"><div class="cap_box_ttl"><span>見出し</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>PowerShellは最初は難しく感じるが、一度覚えると自動化の幅が劇的に広がる。</li>



<li>まずは「今のbatを1つだけPowerShellに書き換えてみる」ことから始めよう。</li>
</ul>
</div></div>



<p>最後まで読んでいただき、ありがとうございます！</p>



<p>ここまで読んでくださったあなたは、もう薄々感じているはずです。 「バッチファイルで頑張っていたあの時間は、もっと短縮できたんだ」と。</p>



<p>もちろん、長年使い古した <code>.bat</code> をすべて捨てる必要はありません。 でも、もし明日「ファイル名を一括で変えたい」「ログから特定のエラーを探したい」という作業が発生したら、グッとこらえて <strong>PowerShell（.ps1）</strong> を開いてみてください。</p>



<p>最初は、実行ポリシーのエラーに首を傾げるかもしれません。 パイプラインの書き方に戸惑うかもしれません。</p>



<p class="is-style-big_icon_point">しかし、その「最初の一歩」を乗り越えた先には、<strong>面倒なルーチンワークを1行のコマンドで終わらせ、涼しい顔で定時に帰宅する「自由」が待っています。</strong></p>



<h3 class="wp-block-heading">次のステップへのヒント</h3>



<ul class="wp-block-list">
<li><strong>まずは「1行」書いてみる:</strong> <code>Get-ChildItem</code>（dirの代わり）から始めてみましょう。</li>



<li><strong>わからないことは「スグ」検索:</strong> PowerShellのコミュニティは広大です。困ったらこの記事を読み返してください。</li>
</ul>



<p>ITエンジニアの世界は、新しい武器を手に入れた者勝ちです。 今日、あなたが手に入れた「PowerShell」という強力な剣を、ぜひ現場で振り回してみてくださいね。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>これからも『スグブログ』では、エンジニアの皆さんが「スグ」に現場で使える技術ネタを発信していきます。</p>



<p>次は、Active Directoryの自動操作や、さらに高度なスクリプト術でお会いしましょう。 それでは、また！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/powershell-beginner-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【SQL】max関数で最大値のレコードを取得する方法</title>
		<link>https://sugublog.org/sql-max/</link>
					<comments>https://sugublog.org/sql-max/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Tue, 19 Mar 2024 09:48:43 +0000</pubDate>
				<category><![CDATA[SQL]]></category>
		<category><![CDATA[max]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6533</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/analytics-8-1024x724.jpg" class="webfeedsFeaturedVisual" /></p>SQLのmax関数で最大値のレコードを取得する方法を教えます。 また最大値のレコードを取得する時のエラーになるものや注意点もお伝えします。 そのエラーの対処法なども現役エンジニアの筆者が答えていきます。 この記事を読めば [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/analytics-8-1024x724.jpg" class="webfeedsFeaturedVisual" /></p>
<p><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">SQLのmax関数</span></strong>で最大値のレコードを取得する方法</span>を教えます。</p>



<p>また<span class="swl-marker mark_yellow">最大値のレコードを取得する時の<span class="swl-inline-color has-swl-deep-01-color"><span class="swl-fz u-fz-l">エラー</span></span>になるものや<span class="swl-inline-color has-swl-deep-01-color"><span class="swl-fz u-fz-l">注意点</span></span></span>もお伝えします。</p>



<p>その<span class="swl-inline-color has-swl-deep-03-color"><span class="swl-fz u-fz-l">エラーの対処法</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>



<p>この記事を読めば<span class="swl-inline-color has-swl-deep-01-color">SQLのmaxについて理解</span>できます。</p>



<h2 class="wp-block-heading">SQLのmax関数で最大値のレコードを取得する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="770" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-1024x770.jpg" alt="max" class="wp-image-4805" srcset="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-1024x770.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-300x226.jpg 300w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-2-768x577.jpg 768w, https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-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">max関数</span></strong>のSQLの基礎</span>は以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select max(カラム名) where テーブル名 group by グルーピングしたいカラム名</code></pre></div>



<p>SQLの<span class="swl-inline-color has-swl-deep-02-color">テーブル基礎構成</span>は以下です。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>SQLのテーブル構成</th><th>カラム１</th><th>カラム２</th></tr></thead><tbody><tr><th>レコード１</th><td>レコード１の値</td><td>レコード１の値</td></tr><tr><th>レコード２</th><td>レコード２の値</td><td>レコード２の値</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのテーブル構成</figcaption></figure>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">max関数の特徴</span></strong>として３つあります。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>SQLのMAX関数の特徴３選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>グループ内で最大値を抽出する</li>



<li>グループを指定しない場合は全体を1グループとして抽出する</li>



<li>数字だけでなく、文字列や日付なども使用可能</li>
</ul>
</div></div>



<h2 class="wp-block-heading">maxを使用してグループ内で最大値を抽出する</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/analytics-6-1024x683.jpg" alt="max" class="wp-image-3692" srcset="https://sugublog.org/wp-content/uploads/2021/07/analytics-6-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/07/analytics-6-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/07/analytics-6-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/07/analytics-6.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">max</span></strong>を使用してグループ内で最大値を抽出</span>してみます。</p>



<p>まず下のようなSQLテーブルがあるとします。テーブル名は「users」にします。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p>「group」カラムが同じものの中での最大値を抽出してみます。そのSQLは以下となります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select group_name ,max(score) from users group by group_name;</code></pre></div>



<p>このSQLを実行した結果は以下となります。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th>group_name</th><th>max(score)</th></tr></thead><tbody><tr><td>A</td><td>43</td></tr><tr><td>B</td><td>41</td></tr><tr><td>C</td><td>12</td></tr></tbody></table><figcaption class="wp-element-caption">SQLの実行結果</figcaption></figure>



<p class="has-border -border01">AからCまでのグループの中で、scoreの最大値が表示されています。</p>



<h2 class="wp-block-heading">maxを持っているレコードを表示したい時の注意点</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/moving_0926-2-1024x683.jpg" alt="注意" class="wp-image-4208" srcset="https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-1024x683.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-300x200.jpg 300w, https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-768x512.jpg 768w, https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p>では先程の条件で<span class="swl-inline-color has-swl-deep-01-color">レコード全体</span>を表示してみます。SQLは以下となります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select id,name,group_name ,max(score) from users group by group_name;</code></pre></div>



<p>selectの後に「id」と「name」を追加しました。</p>



<p>実行結果は以下となりました。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th>group_name</th><th> score </th></tr></thead><tbody><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true"> </span>2</td><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>user_2</td><td>A</td><td>43</td></tr><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>1</td><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true"> </span>user_1</td><td>B</td><td>41</td></tr><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>4</td><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>user_4</td><td>C</td><td>12</td></tr></tbody></table><figcaption class="wp-element-caption">SQLの実行結果</figcaption></figure>



<p>このSQLですがデーターベースの種類によって<span class="swl-bg-color has-swl-deep-01-background-color">エラー</span>が出るか、<span class="swl-bg-color has-swl-deep-01-background-color">想定外のグループの最初の人</span>が出るかになります。</p>



<p class="is-style-big_icon_point">「group by」でグルーピングした場合は<span class="swl-inline-color has-swl-deep-01-color">「group by」で指定したカラム</span>か、<span class="swl-inline-color has-swl-deep-01-color">関数（maxやminなど）</span>でないと思い通りに処理してくれません。</p>



<p>このDBではエラーが出ず結果が出ていますが、「id」と「name」に関しては正常に表示されていません。</p>



<p class="has-border -border01">例えばAグループの最高得点は43ですが、その方の「id」は「5」、「name」は「user_5」が正解です。しかしここでは「id」は「2」、「name」は「user_2」となっており、想定通りではありません。</p>



<p class="is-style-big_icon_caution">「group by」でグルーピングした場合は<span class="swl-marker mark_yellow"><span class="swl-inline-color has-swl-deep-01-color"><strong>「group by」で指定したカラム</strong></span>か<strong><span class="swl-inline-color has-swl-deep-01-color">関数（maxやminなど）</span></strong>以外は指定しないでください。</span></p>



<h2 class="wp-block-heading">max関数でグループを指定しない場合</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/11/user1114-1024x620.jpg" alt="グルーピング" class="wp-image-4505" srcset="https://sugublog.org/wp-content/uploads/2021/11/user1114-1024x620.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/user1114-300x182.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/user1114-768x465.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/user1114.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">max関数でグループを指定しない場合</span></strong>を試します。SQLは以下となります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select group_name ,max(score) from users;</code></pre></div>



<p>scoreのmax以外にgroup_nameを追加で表示させています。実行結果は以下です。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th>group_name</th><th>max(score)</th></tr></thead><tbody><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>B</td><td>43</td></tr></tbody></table><figcaption class="wp-element-caption">SQLの実行結果</figcaption></figure>



<p class="has-border -border01">テーブル全体で一番最大の43が表示されていますが、それに対応する「group_name」の「A」ではなく「B」が表示されています。</p>



<p class="is-style-big_icon_caution">グループを指定しない場合はテーブルを一つのグループとして抽出するので<span class="swl-marker mark_yellow"><strong><span class="swl-inline-color has-swl-deep-01-color">関数（maxやmin）以外</span></strong>は指定しないでください。</span></p>



<h2 class="wp-block-heading">maxで数字だけでなく、文字列や日付などの最大を抽出</h2>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" width="1024" height="649" src="https://sugublog.org/wp-content/uploads/2021/06/time1-1-min-e1623600613499.jpg" alt="日付" class="wp-image-2966" srcset="https://sugublog.org/wp-content/uploads/2021/06/time1-1-min-e1623600613499.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/06/time1-1-min-e1623600613499-300x190.jpg 300w, https://sugublog.org/wp-content/uploads/2021/06/time1-1-min-e1623600613499-768x487.jpg 768w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th>birthday</th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>1999-4-3</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>1996-07-15</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>2001-12-03</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>2006-01-09</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>1998-07-07</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p>maxやminは数字だけではなく、<span class="swl-inline-color has-swl-deep-01-color">日付や文字列</span>まで優劣をつけてくれます。</p>



<p>ここでは日付の最大を抽出してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>select group_name,name,max(birthday) from users;</code></pre></div>



<p>SQLの実行結果は以下となりました。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> group_name</th><th>name</th><th> max(birthday)</th></tr></thead><tbody><tr><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>B</td><td data-has-cell-bg="1" data-text-color="white"><span class="swl-cell-bg has-swl-deep-01-background-color" data-text-color="white" aria-hidden="true">&nbsp;</span>user_1</td><td>2006-01-09</td></tr></tbody></table><figcaption class="wp-element-caption">SQLの実行結果</figcaption></figure>



<p class="has-border -border01">maxで最大の「2006年1月9日」が抽出されています。</p>



<p class="is-style-icon_bad">max以外の指定カラムは出鱈目（デタラメ）なので注意です。</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">max関数以外のレコードも全て表示する方法</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="288" src="https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1-1024x288.jpg" alt="" class="wp-image-3983" srcset="https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1-1024x288.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1-300x84.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1-768x216.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/programing_0813-1.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td>1</td><td>user_1</td><td>41</td><td>B</td></tr><tr><td>2</td><td>user_2</td><td>24</td><td>A</td></tr><tr><td>3</td><td>user_3</td><td>35</td><td>B</td></tr><tr><td>4</td><td>user_4</td><td>12</td><td>C</td></tr><tr><td>5</td><td>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">maxで最大値のレコード全体を表示</span></strong>できないかをサブクエリで試行錯誤してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-sql" data-lang="SQL"><code>SELECT * 
FROM `users` AS u 
where score 
in (select max(score) 
from `users` AS s 
where u.group_name = s.group_name)</code></pre></div>



<p>「users」のテーブルを「u」として「score」がサブクエリの結果の範囲に入っているレコードを表示します。</p>



<p>サブクエリでは「users」テーブルを「s」として「u」と「s」の「group_name」が同じもののmax（最大値）を表示します。</p>



<p>サブクエリの最大値がscoreと同じレコードを全て表示しています。</p>



<p>SQLの結果は以下となりました。</p>



<figure class="wp-block-table is-style-regular"><table class="has-fixed-layout"><thead><tr><th> id </th><th> name </th><th> score </th><th>group_name</th></tr></thead><tbody><tr><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>1</td><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>user_1</td><td>41</td><td>B</td></tr><tr><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>4</td><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>user_4</td><td>12</td><td>C</td></tr><tr><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>5</td><td data-has-cell-bg="1"><span data-icon-size="l" data-icon-type="bg" aria-hidden="true" class="swl-cell-bg"> </span>user_5</td><td>43</td><td>A</td></tr></tbody></table><figcaption class="wp-element-caption">SQLのusersテーブル</figcaption></figure>



<p class="has-border -border01">グループごとのmax（最大値）が表示され、そのレコードも全て表示できました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sugublog.org/sql-max/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<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>【bat】バッチでログの出力方法をご紹介！実行結果などを出力する</title>
		<link>https://sugublog.org/bat-log/</link>
					<comments>https://sugublog.org/bat-log/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Sun, 25 Feb 2024 14:21:42 +0000</pubDate>
				<category><![CDATA[bat]]></category>
		<category><![CDATA[bat log]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6423</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>bat（バッチ）ファイルで実行結果をログに出力しませんか？ 日時処理などでこけていた場合に、どこで失敗したか確認する時にログ出力は必須です。 また日時や時間を使用してログファイル名を変えたいと思った事はないでしょうか？  [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/09/moving_0926-2-1024x683.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong><span class="swl-inline-color has-swl-deep-01-color">bat（バッチ）ファイル</span></strong>で実行結果を<strong>ログ</strong>に<strong>出力</strong>しませんか？</p>



<p>日時処理などでこけていた場合に、どこで失敗したか確認する時に<strong>ログ出力は必須</strong>です。</p>



<p>また日時や時間を使用してログファイル名を変えたいと思った事はないでしょうか？</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>そんなエンジニアの悩みに、現役エンジニアの筆者が答えていきます。</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="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">bat（バッチ）でログの出力方法</h2>


<div class="wp-block-image is-style-photo_frame">
<figure class="aligncenter size-large"><img decoding="async" src="https://sugublog.org/wp-content/uploads/2021/12/PC教室20211216-7-1024x1024.jpg" alt="パソコン教室" class="wp-image-4810"/></figure>
</div>


<h3 class="wp-block-heading">bat（バッチ）でログの出力方法の基本</h3>



<p><strong><span class="swl-inline-color has-swl-deep-01-color">bat（バッチ）でログの出力方法</span></strong>はリダイレクトを使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="log出力.bat"><code>echo 処理STEP1完了しました！ &gt;&gt; log.log</code></pre></div>



<p>「&gt;」は上書き保存し「&gt;&gt;」は追記になります。</p>



<p>これでbatファイルと同階層にlog.logファイルが出力されます。</p>



<p>logファイルの中身を確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="log.logの中身"><code>処理STEP1完了しました！</code></pre></div>



<p class="has-border -border02">batファイルでログの出力ができています。</p>



<h3 class="wp-block-heading">ログに日付と時間を記入する</h3>



<p>今度は<span class="swl-marker mark_orange">ログの内容に日付と時間を入れてみます。</span></p>



<p>batでもともと使用できる変数にdateやtimeというものがあり、それらを使用すれば簡単に日付と時間を取得する事が可能です。</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/06/time1-1-min-e1623600613499-300x190.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/bat-date-time/">【bat】バッチで日付や時間を取得する方法！初心者向けで簡単に取得可能</a>
						<span class="p-blogCard__excerpt">バッチで日付や時間を取得できれば出来る事は多くなります。 例えば本日の日付と時間を組み合わせて、ログファイルやディレクトリを作成するなどです。 そうする事によ&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p>batで変数を展開する時は前後に「%」をつけます。dateなら「%date%」となります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="log出力.bat" data-line="2"><code>echo %date% %time% 処理STEP1完了しました！ &gt;&gt; log.log</code></pre></div>



<p>logファイルの中身を確認してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="log.logの中身"><code>処理STEP1完了しました！ 
2024/02/25 15:08:46.56 処理STEP1完了しました！</code></pre></div>



<p class="has-border -border02">先程のファイル内容に、日付と時間付きログが追加されているのがわかります。</p>



<p class="is-style-icon_info">このようにbatの処理ステップごとに日付と時間を付けてログ出力すれば、どこで処理が失敗したか、何時に処理が行われているかがわかり、エラーの原因究明に一役かうことがあるかもしれません。</p>



<h3 class="wp-block-heading">ログのパスが絶対パスにて書かれている場合の注意点</h3>



<p>ログ出力のパスは絶対パスで指定する事が決まっている環境もあると思います。そんな時にbatファイル流用しようとすればパスもいちいち修正しなければいけません。</p>



<p>そうならない為にもbatのパスを変数で指定しておきます。「%~dp0\」で取得することが可能です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="log出力.bat" data-line="2"><code>echo %date% %time% 処理STEP1完了しました！ &gt;&gt; %~dp0\log.log</code></pre></div>



<p>このbatファイルを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="log.logの中身"><code>処理STEP1完了しました！ 
2024/02/25 15:08:46.56 処理STEP1完了しました！
2024/02/25 15:23:12.49 STEP1完了しました！ </code></pre></div>



<p class="has-border -border01">絶対パスでも同じ様に追記されています。</p>



<h2 class="wp-block-heading">bat（バッチ）でログファイル名を日付や時間にして出力する</h2>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="664" src="https://sugublog.org/wp-content/uploads/2021/11/HDD_1107-3-1-1024x664.jpg" alt="ログ出力" class="wp-image-4363" srcset="https://sugublog.org/wp-content/uploads/2021/11/HDD_1107-3-1-1024x664.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/11/HDD_1107-3-1-300x195.jpg 300w, https://sugublog.org/wp-content/uploads/2021/11/HDD_1107-3-1-768x498.jpg 768w, https://sugublog.org/wp-content/uploads/2021/11/HDD_1107-3-1.jpg 1199w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="is-style-big_icon_check">今度は日付や時間で<strong>ログファイル名</strong>を変更したいと思いませんか？</p>



<p>そうすれば日付や時間ごとにログファイルを分ける事ができて、後から見やすくなります。</p>



<p>先程と同じように日付と時間を変数にて取得して、ログ出力してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>echo %date% %time% STEP1完了しました！ &gt;&gt; %~dp0\%date%%time%log.log</code></pre></div>



<p>このbatを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>ファイル名、ディレクトリ名、またはボリューム ラベルの構文が間違っています。</code></pre></div>



<p class="is-style-big_icon_batsu">エラーがでてログ出力できていません。</p>



<h3 class="wp-block-heading">ログファイル名を日付や時間にするとエラーが起こる原因と対処法</h3>



<p>batでログファイル名を日付や時間にするとエラーが起こる原因は、<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" data-file="log.logの中身"><code>処理STEP1完了しました！ 
2024/02/25 15:08:46.56 処理STEP1完了しました！
2024/02/25 15:23:12.49 STEP1完了しました！ </code></pre></div>



<p class="is-style-big_icon_caution">dateで取得した日付の「/」が使用できません。timeでは「:」が使用できません。</p>



<p>ですので%date%と%time%で取得した、使用できない文字列を修正する必要があります。</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>



<p>修正したbatファイルが以下です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>set time1=%time::=%
echo %date% %time% STEP1完了しました！ &gt;&gt; %~dp0\%date:/=%-%time1:~0,6%.log</code></pre></div>



<p>時間の「:」を削除して変数「time1」にいれました。（set time1=%time::=%）</p>



<p>time1の最初の文字から6文字目までを取得するのが（%time1:~0,6%）</p>



<p>日付の「/」を削除するコマンドが（%date:/=%）</p>



<p class="is-style-icon_book">batの詳しい変数や変数の修正方法は以下の記事を参照下さい。</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-11-300x195.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/bat-hensu/">【bat】バッチファイルで変数や環境変数の使い方！エラー対処法あり</a>
						<span class="p-blogCard__excerpt">バッチファイルで変数や環境変数を設定するやり方を教えます。 その他にも変数に関わる事をご紹介します。 この記事でわかる事 変数を指定する時の注意点など 計算結果&#8230;</span>					</div>
				</div>
			</div>
		</div>


<p>ではこの修正したbatファイルを実行して、ログ出力を行います。</p>



<p class="has-border -border02">batと同階層に「日付-時間6桁.log」ファイルが作成されて、中身に「日付 時間 STEP1完了しました！」とログ出力できています。</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>batでログ出力する時に使用してみてください。</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/bat-log/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【bat】typeコマンドの様々な使い方！nulを併用するやり方もご紹介</title>
		<link>https://sugublog.org/bat-type-command-nul/</link>
					<comments>https://sugublog.org/bat-type-command-nul/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[suguru]]></dc:creator>
		<pubDate>Sun, 25 Feb 2024 05:13:21 +0000</pubDate>
				<category><![CDATA[bat]]></category>
		<category><![CDATA[bat type]]></category>
		<guid isPermaLink="false">https://sugublog.org/?p=6415</guid>

					<description><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/analytics-7-1024x454.jpg" class="webfeedsFeaturedVisual" /></p>batでtypeコマンドの使い方を知っていますでしょうか？ ファイルの中身やbatファイルの中身などを表示する事ができます。 その他にnulと併用してファイル作成することも可能です。 この記事を読む事でbatのtypeコ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><img src="https://sugublog.org/wp-content/uploads/2021/07/analytics-7-1024x454.jpg" class="webfeedsFeaturedVisual" /></p>
<p><strong><span class="swl-inline-color has-swl-deep-01-color">bat</span></strong>で<strong><span class="swl-inline-color has-swl-deep-01-color">typeコマンド</span></strong>の使い方を知っていますでしょうか？</p>



<p>ファイルの中身やbatファイルの中身などを表示する事ができます。</p>



<p>その他にnulと併用してファイル作成することも可能です。</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>そんなbatのtypeコマンドについて、現役エンジニアの筆者がまとめました。</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="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">bat</span></strong>の<strong><span class="swl-inline-color has-swl-deep-01-color">typeコマンド</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">batでtypeコマンドの使い方</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="batのtypeコマンド" 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">bat</span></strong>の<strong><span class="swl-inline-color has-swl-deep-01-color">typeコマンド</span></strong>の使い方の基礎は、ファイルなどの中身を表示する事です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>type ファイル名</code></pre></div>



<p>このコマンドでファイルの内容を表示します。</p>



<p class="is-style-icon_info">ではbatファイルの同じ階層に下の図のような環境があるとします。</p>


<div class="wp-block-image is-style-border">
<figure class="aligncenter size-full"><img decoding="async" width="858" height="640" src="https://sugublog.org/wp-content/uploads/2024/02/bat_type_1.png" alt="batのtypeコマンド" class="wp-image-6421" srcset="https://sugublog.org/wp-content/uploads/2024/02/bat_type_1.png 858w, https://sugublog.org/wp-content/uploads/2024/02/bat_type_1-300x224.png 300w, https://sugublog.org/wp-content/uploads/2024/02/bat_type_1-768x573.png 768w" sizes="(max-width: 858px) 100vw, 858px" /></figure>
</div>


<p class="is-style-icon_announce">type.batには以下のコードを記入します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="type.bat"><code>@echo off
type type_text.txt
type type_bat.bat
pause</code></pre></div>



<p>このbatファイルを実行して、テキストファイルとバッチファイルの中身を表示します。</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/07/analytics-2-300x157.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/bat-execution/">【bat】バッチを実行する方法！実行できない時の対処法などをご紹介</a>
						<span class="p-blogCard__excerpt">batファイルが既にありそれを実行してと言われたけど、どうやって実行すればわからない人の悩みに答えます。 またbatを実行しようとしたけど、できなかった時の原因と対&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="type.batの結果"><code>type_textの内容@echo off
type_bat続行するには何かキーを押してください . . .</code></pre></div>



<p class="has-border -border02">テキストファイルとバッチファイルの内容が表示されています。</p>



<p class="is-style-icon_bad">改行がされてなく綺麗に表示されていないので、修正します。</p>



<p>batファイルで改行をいれるには「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/11/script_1114-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/bat-kaigyou/">【bat】バッチで改行する方法！echoで改行する方法も教えます！</a>
						<span class="p-blogCard__excerpt">bat（バッチ）ファイルを作成する時に、コマンドが長くなって読みにくい事はないでしょうか？ またechoなどで表示した文字などを、改行して綺麗に表示したい時はありま&#8230;</span>					</div>
				</div>
			</div>
		</div>


<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="type.bat"><code>@echo off
type type_text.txt
echo.
type type_bat.bat
echo.
pause</code></pre></div>



<p>修正したbatファイルでを実行します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>type_textの内容
@echo off
type_bat
続行するには何かキーを押してください . . .</code></pre></div>



<p class="has-border -border02">テキストファイルの内容とバッチファイルの内容が<span class="swl-bg-color has-swl-deep-02-background-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">typeコマンドとnulでファイルを作成するやり方</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="batのtypeコマンド" 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><span class="swl-marker mark_orange"><strong><span class="swl-inline-color has-swl-deep-01-color">typeコマンド</span></strong>はファイルの中身を表示するほかに、<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>type nul &gt; 新規ファイル名</code></pre></div>



<p>nulとは何もない事を意味します。＞はリダイレクトでファイルに追記したり、新規ファイルを作成する事ができます。</p>



<p>つまりこのbatは内容がない新規ファイルを作成するという意味です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain" data-file="type-new-file-create.bat"><code>@echo off
type nul &gt; new_file_text.txt
pause</code></pre></div>



<p>上のbatを実行すると同じ階層に「new_file_text.txt」というファイルを新規作成する事が可能です。</p>



<p class="is-style-icon_book">batでtype以外で新規ファイル作成する方法は以下の記事て纏めています。</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/DB0804-3-300x210.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/bat-file-create/">【bat基礎】バッチでファイルを簡単に作成する方法！全３種類ご紹介</a>
						<span class="p-blogCard__excerpt">batファイルでファイルを作成する方法をお伝えします。 ファイルを何個も作成する場合に、batで行えば楽に業務を遂行する事が可能です。 batでファイルを簡単に作成する&#8230;</span>					</div>
				</div>
			</div>
		</div>


<h2 class="wp-block-heading">まとめ：batでtypeコマンドの使い方</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-9-1024x576.jpg" alt="スクリプト" class="wp-image-3866" srcset="https://sugublog.org/wp-content/uploads/2021/08/script_0809-9-1024x576.jpg 1024w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-9-300x169.jpg 300w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-9-768x432.jpg 768w, https://sugublog.org/wp-content/uploads/2021/08/script_0809-9.jpg 1200w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p><strong><span class="swl-inline-color has-swl-deep-01-color">bat</span></strong>で<strong><span class="swl-inline-color has-swl-deep-01-color">typeコマンド</span></strong>を使用して出来る事をまとめます。</p>



<div class="swell-block-capbox cap_box is-style-onborder_ttl"><div class="cap_box_ttl"><span>batでtypeを使用して出来る事2選</span></div><div class="cap_box_content">
<ul class="wp-block-list">
<li>ファイルの中身を表示できる</li>



<li>新規ファイルを作成できる</li>
</ul>
</div></div>



<p><strong><span class="swl-inline-color has-swl-deep-02-color">ファイルの中身を表示するbatファイル</span></strong>の構文</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>type ファイル名</code></pre></div>



<p><strong><span class="swl-inline-color has-swl-deep-03-color">新規ファイルを作成する</span></strong>構文</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>type nul &gt; 新規ファイル名</code></pre></div>


<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/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>今回は<strong><span class="swl-inline-color has-swl-deep-01-color">bat</span></strong>の<strong><span class="swl-inline-color has-swl-deep-01-color">typeコマンド</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/bat-type-command-nul/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
