<?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>grep &#8211; スグブログ</title>
	<atom:link href="https://sugublog.org/tag/grep/feed/" rel="self" type="application/rss+xml" />
	<link>https://sugublog.org</link>
	<description>ブログ運営について発信中</description>
	<lastBuildDate>Sat, 27 Apr 2024 15:06:59 +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>grep &#8211; スグブログ</title>
	<link>https://sugublog.org</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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>
	</channel>
</rss>
