<?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>シェル;sed;学習; | ～下町物語～</title>
	<atom:link href="https://blog.rurineko.com/archives/tag/%e3%82%b7%e3%82%a7%e3%83%absed%e5%ad%a6%e7%bf%92/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.rurineko.com</link>
	<description>入り組んだ現代社会に鋭いメスを入れ、おもしろおかしく書綴るブログである</description>
	<lastBuildDate>Tue, 16 Dec 2014 01:15:02 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.rurineko.com/wp-content/uploads/2017/04/cropped-image2_9-32x32.jpg</url>
	<title>シェル;sed;学習; | ～下町物語～</title>
	<link>https://blog.rurineko.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/>
<atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/>
<atom:link rel="hub" href="https://websubhub.com/hub"/>
<atom:link rel="self" href="https://blog.rurineko.com/archives/tag/%e3%82%b7%e3%82%a7%e3%83%absed%e5%ad%a6%e7%bf%92/feed"/>
	<item>
		<title>正規表現チェッカー？を作ってみた。</title>
		<link>https://blog.rurineko.com/archives/3687</link>
		
		<dc:creator><![CDATA[rurineko]]></dc:creator>
		<pubDate>Tue, 16 Dec 2014 01:15:02 +0000</pubDate>
				<category><![CDATA[Linux(シェル)]]></category>
		<category><![CDATA[シェル;sed;学習;]]></category>
		<guid isPermaLink="false">http://blog.rurineko.com/?p=3687</guid>

					<description><![CDATA[<p><span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">この記事を読む およそ時間</span> <span class="rt-time"> 4</span> <span class="rt-label rt-postfix">分</span></span>○シェル概要正規表現が苦手ということで、sedを使ったちょっとした正規表現チェッカーを作成する事にした。 sedは色々できるのだが、多くはファイル内の文字列置換に使われたりシェルの中でシェルに渡される文字列を置換したりす [&#8230;]</p>
<p>The post <a href="https://blog.rurineko.com/archives/3687">正規表現チェッカー？を作ってみた。</a> first appeared on <a href="https://blog.rurineko.com">～下町物語～</a>.</p>]]></description>
										<content:encoded><![CDATA[<span class="span-reading-time rt-reading-time" style="display: block;"><span class="rt-label rt-prefix">この記事を読む およそ時間</span> <span class="rt-time"> 4</span> <span class="rt-label rt-postfix">分</span></span><p>○シェル概要<br />正規表現が苦手ということで、sedを使ったちょっとした<br />正規表現チェッカーを作成する事にした。</p>
<p>sedは色々できるのだが、多くはファイル内の文字列置換に使われたり<br />シェルの中でシェルに渡される文字列を置換したりする<br />その時、正規表現を使い処理する目的に使われる。</p>
<p>よって、sedに正規表現をぶつけることで、<br />正規表現が正しい物かをチェックできることから作成を行った。</p>
<p>○前提<br />シェルの置き場所　　　　：/script/com/配下<br />置換する元テストファイル：/script/com/testpattern/配下<br />練習問題用ファイル　　　：/script/com/testpattern/zzz.txt　　（問題質問）<br />練習問題用ファイル　　　：/script/com/testpattern/zzz-a.txt　（問題回答）<br />書出されるディレクトリ　：/script/com/testpattern/配下<br />き出されるファイル名　　：sed-yyyy-mm-dd-**_**_**.output.txt</p>
<p>リストには、output/zzzがつく文字列のファイルはリストアップしない仕組みとした。</p>
<p>シェルは、今後練習問題を拡張することもあると思うので<br />function形式で作成した。</p>
<p>○改修ポイント<br />今シェルの置き場所等、あえて変数化していないが<br />どこかで固定でおくなら変数化するのが好ましい。</p>
<p>また、使い方として今はあえてメニュー形式にしたが<br />$1 $2の引数形式で入力も良いと思うが、<br />そうなってくるとsedコマンドを叩いた方が速い為<br />このシェルの意味が薄れていく可能性が高い。<br />あえて学習するということを前提に作ったシェルである。</p>
<p>○問題練習を増やす方法は以下の通り</p>
<p>部品１（以下の部分を３．問題練習１とする・４．終了を５に変更）<br />echo &#8220;################### Menu ##################&#8221;<br />echo &#8220;&#8221;<br />echo &#8221; １．正規表現チェック&#8221;<br />echo &#8220;&#8221;<br />echo &#8221; ２．使い方表示&#8221;<br />echo &#8220;&#8221;<br />echo &#8221; ３．練習問題&#8221;<br />echo &#8220;&#8221;<br />echo &#8221; ４．終了&#8221;<br />echo&#8221;&#8221;<br />echo &#8220;###########################################&#8221;</p>
<p>部品２(同様に FUNC_mondai2を作成し4)→5)に変更）<br /> 3)<br /> FUNC_mondai1<br /> ;;<br /> 4)<br /> echo &#8220;正規表現チェッカーを終了します&#8221;<br /> exit 0<br /> ;;</p>
<p>部品３（FUNC_mondai1→FUNC_mondai2に変更して問題を書き換える)<br />/script/com/testpattern配下に元ファイルを作成して<br />正規表現で期待値になるファイルを作成しシェル内部に記載する。<br />diff でリターン値が0が帰ってくる仕様で正解か不正解を判定しています。</p>
<p>function FUNC_mondai1<br />{<br /> echo &#8220;AAA BBB CCC DDD BBB という文字列がある&#8221;<br /> echo &#8220;上記文字列をAAA ZZZ CCC DDD ZZZ に変更したい場合の正規表現を考えて入力してください。&#8221;<br /> echo &#8220;&#8221;<br /> echo &#8220;AAA BBB CCC DDD BBB&#8221;<br /> echo &#8220;↓↓↓↓↓↓↓↓↓↓&#8221;<br /> echo &#8220;AAA ZZZ CCC DDD ZZZ&#8221;<br /> echo &#8220;&#8221;</p>
<p>read TINPUT<br /> cat /script/com/check.txt | /bin/sed -e &#8220;s${TINPUT}/g&#8221; &gt; /dev/null 2&gt;&amp;1<br /> if [ $? = 1 ]<br /> then<br /> echo &#8220;入力した正規表現【$SEDINPUT】が間違っています&#8221;<br /> echo &#8220;もう一度入力してください。&#8221;<br /> sleep 5<br /> FUNC_mondai1<br /> else<br /> cat /script/com/testpattern/zzz.txt | /bin/sed -e &#8220;s${TINPUT}/g&#8221; &gt; /tmp/a.txt<br /> diff /tmp/a.txt /script/com/testpattern/zzz-a.txt &gt; /dev/null 2&gt;&amp;1<br /> if [ $? = 1 ];<br /> then<br /> echo &#8220;不正解です。http://hydrocul.github.io/wiki/commands/sed.html で確認して再度入力してくださ<br />い。&#8221;<br /> sleep 10<br /> rm -rf /tmp/a.txt<br /> clear<br /> FUNC_mondai1<br /> else<br /> echo &#8220;正解です。&#8221;<br /> rm -rf /tmp/a.txt<br /> sleep 10<br /> FUNC_menu<br /> fi<br /> fi<br />}</p>
<p>○処理結果（正常パターン）エビデンス</p>
<p>1.チェッカ<br />################### Menu ##################</p>
<p>１．正規表現チェック</p>
<p>２．使い方表示</p>
<p>３．練習問題</p>
<p>４．終了</p>
<p>###########################################<br />1<br />置換対象ファイルを入力してください<br />###### List ########<br />aaa.txt<br />####################<br />aaa.txt<br />対象ファイルは aaa.txtですね<br />良ければ(y/n)<br />y<br />テストしたい正規表現を入れてください<br />/abc/aBC<br />入力した正規表現で処理した結果を表示します。<br />###################################################<br />変更された部分を表示します。<br />1c1<br />&lt; abc Abc aBc abC AbC AAA abe kkk bbb eee ccc<br />&#8212;<br />&gt; aBC Abc aBc abC AbC AAA abe kkk bbb eee ccc<br />###################################################<br />結果をアウトプットしますか？<br />y<br />アウトプットファイルは【/script/com/testpattern/sed-2014-12-15-13_07_39.output.txt】です。</p>
<p>●ファイル指定が間違っている場合<br />################### Menu ##################</p>
<p>１．正規表現チェック</p>
<p>２．使い方表示</p>
<p>３．練習問題</p>
<p>４．終了</p>
<p>###########################################<br />1<br />置換対象ファイルを入力してください<br />###### List ########<br />aaa.txt<br />####################<br />bbbbb.txt<br />対象ファイルがありません</p>
<p>●テストパターン正規表現が間違っている場合<br />################### Menu ##################</p>
<p>１．正規表現チェック</p>
<p>２．使い方表示</p>
<p>３．練習問題</p>
<p>４．終了</p>
<p>###########################################<br />1<br />置換対象ファイルを入力してください<br />###### List ########<br />aaa.txt<br />####################<br />aaa.txt<br />対象ファイルは aaa.txtですね<br />良ければ(y/n)<br />y<br />テストしたい正規表現を入れてください<br />/aaabbb<br />入力した正規表現【/aaabbb】が間違っています</p>
<p>正規表現チェッカの使い方</p>
<p>例＞対象ファイルからabcという文字列をABCに変換した場合 -&gt; 【/abc/ABC】と入力する</p>
<p>その他詳細なオプションを組み込むことが可能<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|メタ文字|意味 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|^ |先頭 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|$ |後尾 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|. |任意の 1 文字 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|* |直前の文字の 0 回以上の繰り返し |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\+ |直前の文字の 1 回以上の繰り返し |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\? |直前の文字が 0 回または 1 回のみ出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|[] |文字クラス、[abc0-9] ならば数字と a, b, c のどれか 1 文字 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\| |OR、[ab|ap] ならば ab または ap |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\{3\} |直前の文字が 3 回だけ出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\{3,5\} |直前の文字が 3?5 回出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\b |単語区切り |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>参考サイト http://hydrocul.github.io/wiki/commands/sed.html<br />メニューに戻る(y/n)</p>
<p>２．使い方表示（正常パターン）<br />################### Menu ##################</p>
<p>１．正規表現チェック</p>
<p>２．使い方表示</p>
<p>３．練習問題</p>
<p>４．終了</p>
<p>###########################################<br />2<br />正規表現チェッカの使い方</p>
<p>例＞対象ファイルからabcという文字列をABCに変換した場合 -&gt; 【/abc/ABC】と入力する</p>
<p>その他詳細なオプションを組み込むことが可能<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|メタ文字|意味 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|^ |先頭 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|$ |後尾 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|. |任意の 1 文字 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|* |直前の文字の 0 回以上の繰り返し |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\+ |直前の文字の 1 回以上の繰り返し |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\? |直前の文字が 0 回または 1 回のみ出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|[] |文字クラス、[abc0-9] ならば数字と a, b, c のどれか 1 文字 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\| |OR、[ab|ap] ならば ab または ap |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\{3\} |直前の文字が 3 回だけ出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\{3,5\} |直前の文字が 3?5 回出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\b |単語区切り |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>参考サイト http://hydrocul.github.io/wiki/commands/sed.html<br />メニューに戻る(y/n)<br />y</p>
<p>○使い方表示でメニューに戻らないを選択した場合<br />################### Menu ##################</p>
<p>１．正規表現チェック</p>
<p>２．使い方表示</p>
<p>３．練習問題</p>
<p>４．終了</p>
<p>###########################################<br />2<br />正規表現チェッカの使い方</p>
<p>例＞対象ファイルからabcという文字列をABCに変換した場合 -&gt; 【/abc/ABC】と入力する</p>
<p>その他詳細なオプションを組み込むことが可能<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|メタ文字|意味 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|^ |先頭 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|$ |後尾 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|. |任意の 1 文字 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|* |直前の文字の 0 回以上の繰り返し |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\+ |直前の文字の 1 回以上の繰り返し |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\? |直前の文字が 0 回または 1 回のみ出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|[] |文字クラス、[abc0-9] ならば数字と a, b, c のどれか 1 文字 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\| |OR、[ab|ap] ならば ab または ap |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\{3\} |直前の文字が 3 回だけ出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\{3,5\} |直前の文字が 3?5 回出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\b |単語区切り |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>参考サイト http://hydrocul.github.io/wiki/commands/sed.html<br />メニューに戻る(y/n)<br />n<br />[root@aaa com]#</p>
<p>●使い方表示でy/n以外を押した場合<br />################### Menu ##################</p>
<p>１．正規表現チェック</p>
<p>２．使い方表示</p>
<p>３．練習問題</p>
<p>４．終了</p>
<p>###########################################<br />2<br />正規表現チェッカの使い方</p>
<p>例＞対象ファイルからabcという文字列をABCに変換した場合 -&gt; 【/abc/ABC】と入力する</p>
<p>その他詳細なオプションを組み込むことが可能<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|メタ文字|意味 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|^ |先頭 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|$ |後尾 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|. |任意の 1 文字 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|* |直前の文字の 0 回以上の繰り返し |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\+ |直前の文字の 1 回以上の繰り返し |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\? |直前の文字が 0 回または 1 回のみ出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|[] |文字クラス、[abc0-9] ならば数字と a, b, c のどれか 1 文字 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\| |OR、[ab|ap] ならば ab または ap |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\{3\} |直前の文字が 3 回だけ出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\{3,5\} |直前の文字が 3?5 回出現 |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />|\b |単語区切り |<br />&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>参考サイト http://hydrocul.github.io/wiki/commands/sed.html<br />メニューに戻る(y/n)</p>
<p>n以外を入れるとメニューに戻る仕様</p>
<p>３．練習問題<br />################### Menu ##################</p>
<p>１．正規表現チェック</p>
<p>２．使い方表示</p>
<p>３．練習問題</p>
<p>４．終了</p>
<p>###########################################<br />3<br />AAA BBB CCC DDD BBB という文字列がある<br />上記文字列をAAA ZZZ CCC DDD ZZZ に変更したい場合の正規表現を考えて入力してください。</p>
<p>AAA BBB CCC DDD BBB<br />↓↓↓↓↓↓↓↓↓↓<br />AAA ZZZ CCC DDD ZZZ</p>
<p>/BBB/ZZZ<br />正解です。</p>
<p>################### Menu ##################</p>
<p>１．正規表現チェック</p>
<p>２．使い方表示</p>
<p>３．練習問題</p>
<p>４．終了</p>
<p>###########################################<br />3<br />AAA BBB CCC DDD BBB という文字列がある<br />上記文字列をAAA ZZZ CCC DDD ZZZ に変更したい場合の正規表現を考えて入力してください。</p>
<p>AAA BBB CCC DDD BBB<br />↓↓↓↓↓↓↓↓↓↓<br />AAA ZZZ CCC DDD ZZZ</p>
<p>/BBB/aaa<br />不正解です。http://hydrocul.github.io/wiki/commands/sed.html で確認して再度入力してください。</p>
<p><span id="more-3687"></span></p>
<p>○シェル本体</p>
<p>#!/bin/sh<br />##++ =======================================================================================<br />## System : 正規化表現チェッカー<br />## Emp-division :<br />## Transaction :<br />## Calling-sequence : sed-check.sh<br />## Option : null<br />## Parameters :<br />## Return : 0 正常終了<br />## : 1 異常終了<br />## Structure :<br />## Abstract :<br />## Modify : 2014/12/15 楠 新規作成<br />##&#8211; ======================================================================================<br />#set -x</p>
<p>#++ ++++++++++++++++++++++++++++++++++++++++++<br /># 環境変数<br />#&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />dtm=`date +%Y-%m-%d-%H_%M_%S`</p>
<p>#++ +++++++++++++++++++++++++++++++++++++++++++<br /># メニュー<br />#&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />function FUNC_menu<br />{<br />clear</p>
<p>echo &#8220;################### Menu ##################&#8221;<br />echo &#8220;&#8221;<br />echo &#8221; １．正規表現チェック&#8221;<br />echo &#8220;&#8221;<br />echo &#8221; ２．使い方表示&#8221;<br />echo &#8220;&#8221;<br />echo &#8221; ３．練習問題&#8221;<br />echo &#8220;&#8221;<br />echo &#8221; ４．終了&#8221;<br />echo&#8221;&#8221;<br />echo &#8220;###########################################&#8221;<br />read comon1<br /> case $comon1 in<br /> 1)<br /> FUNC_checker<br /> ;;<br /> 2)<br /> FUNC_help<br /> ;;<br /> 3)<br /> FUNC_mondai1<br /> ;;<br /> 4)<br /> echo &#8220;正規表現チェッカーを終了します&#8221;<br /> exit 0<br /> ;;<br /> *)<br /> echo &#8220;-&gt; オプションが不明です&#8221;<br /> sleep 2<br /> clear<br /> FUNC_menu<br /> esac<br />}</p>
<p>function FUNC_checker<br />{<br /> echo &#8220;置換対象ファイルを入力してください&#8221;<br /> echo &#8220;###### List ########&#8221;<br /> ls /script/com/testpattern/ | grep -v output | grep -v zzz<br /> echo &#8220;####################&#8221;<br /> read TF</p>
<p>if [ ! -e &#8220;/script/com/testpattern/${TF}&#8221; ]<br /> then<br /> echo &#8220;対象ファイルがありません&#8221;<br /> sleep 5<br /> FUNC_menu<br /> else<br /> echo &#8220;対象ファイルは ${TF}ですね &#8220;<br /> echo &#8220;良ければ(y/n)&#8221;<br /> read CINPUT<br /> if [ ${CINPUT} = &#8220;y&#8221; ]<br /> then<br /> echo &#8220;テストしたい正規表現を入れてください&#8221;<br /> read SEDINPUT<br /> cat /script/com/check.txt | /bin/sed -e &#8220;s${SEDINPUT}/g&#8221; &gt; /dev/null 2&gt;&amp;1<br /> if [ $? = 1 ]<br /> then<br /> echo &#8220;入力した正規表現【$SEDINPUT】が間違っています&#8221;<br /> FUNC_help<br /> else<br /> echo &#8220;入力した正規表現で処理した結果を表示します。&#8221;<br /> cat /script/com/testpattern/${TF} | /bin/sed -e &#8220;s${SEDINPUT}/g&#8221; &gt; /script/com/testpattern/sed-${dtm}.txt<br /> if [ $? = 1 ];then<br /> echo &#8220;チェック処理が心配しました&#8221;<br /> rm -rf /script/com/testpattern/sed-${dtm}.txt<br /> sleep 5<br /> FUNC_help<br /> fi</p>
<p>echo &#8220;###################################################&#8221;<br /> echo &#8220;変更された部分を表示します。&#8221;<br /> diff /script/com/testpattern/${TF} /script/com/testpattern/sed-${dtm}.txt<br /> echo &#8220;###################################################&#8221;<br /> echo &#8220;結果をアウトプットしますか？&#8221;<br /> read COUTPUT</p>
<p>if [ ${COUTPUT} = &#8220;y&#8221; ]<br /> then<br /> mv /script/com/testpattern/sed-${dtm}.txt /script/com/testpattern/sed-${dtm}.output.txt<br /> echo &#8220;アウトプットファイルは【/script/com/testpattern/sed-${dtm}.output.txt】です。&#8221;<br /> sleep 5<br /> FUNC_menu<br /> else<br /> rm -rf /script/com/testpattern/sed-${dtm}.txt<br /> FUNC_menu<br /> fi<br /> fi<br /> fi<br /> fi<br />}</p>
<p>function FUNC_mondai1<br />{<br /> echo &#8220;AAA BBB CCC DDD BBB という文字列がある&#8221;<br /> echo &#8220;上記文字列をAAA ZZZ CCC DDD ZZZ に変更したい場合の正規表現を考えて入力してください。&#8221;<br /> echo &#8220;&#8221;<br /> echo &#8220;AAA BBB CCC DDD BBB&#8221;<br /> echo &#8220;↓↓↓↓↓↓↓↓↓↓&#8221;<br /> echo &#8220;AAA ZZZ CCC DDD ZZZ&#8221;<br /> echo &#8220;&#8221;</p>
<p>read TINPUT<br /> cat /script/com/check.txt | /bin/sed -e &#8220;s${TINPUT}/g&#8221; &gt; /dev/null 2&gt;&amp;1<br /> if [ $? = 1 ]<br /> then<br /> echo &#8220;入力した正規表現【$SEDINPUT】が間違っています&#8221;<br /> echo &#8220;もう一度入力してください。&#8221;<br /> sleep 5<br /> FUNC_mondai1<br /> else<br /> cat /script/com/testpattern/zzz.txt | /bin/sed -e &#8220;s${TINPUT}/g&#8221; &gt; /tmp/a.txt<br /> diff /tmp/a.txt /script/com/testpattern/zzz-a.txt &gt; /dev/null 2&gt;&amp;1<br /> if [ $? = 1 ];<br /> then<br /> echo &#8220;不正解です。http://hydrocul.github.io/wiki/commands/sed.html で確認して再度入力してください。&#8221;<br /> sleep 10<br /> rm -rf /tmp/a.txt<br /> clear<br /> FUNC_mondai1<br /> else<br /> echo &#8220;正解です。&#8221;<br /> rm -rf /tmp/a.txt<br /> sleep 10<br /> FUNC_menu<br /> fi<br /> fi<br />}</p>
<p>function FUNC_help<br />{<br />echo &#8220;正規表現チェッカの使い方&#8221;<br />echo &#8220;&#8221;<br />echo &#8220;例＞対象ファイルからabcという文字列をABCに変換した場合 -&gt; 【/abc/ABC】と入力する&#8221;<br />echo &#8220;&#8221;<br />echo &#8220;その他詳細なオプションを組み込むことが可能&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|メタ文字|意味 |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|^ |先頭 |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|$ |後尾 |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|. |任意の 1 文字 |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|* |直前の文字の 0 回以上の繰り返し |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|\+ |直前の文字の 1 回以上の繰り返し |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|\? |直前の文字が 0 回または 1 回のみ出現 |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|[] |文字クラス、[abc0-9] ならば数字と a, b, c のどれか 1 文字 |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|\| |OR、[ab|ap] ならば ab または ap |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|\{3\} |直前の文字が 3 回だけ出現 |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|\{3,5\} |直前の文字が 3?5 回出現 |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;|\b |単語区切り |&#8221;<br />echo &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#8220;<br />echo &#8220;&#8221;<br />echo &#8220;参考サイト http://hydrocul.github.io/wiki/commands/sed.html &#8220;</p>
<p>echo &#8220;メニューに戻る(y/n)&#8221;<br />read CMENU<br /> if [ -n &#8220;$CMENU&#8221; ]<br /> then<br /> if [ ${CMENU} = &#8220;y&#8221; ]<br /> then<br /> FUNC_menu<br /> else<br /> exit 0<br /> fi<br /> else<br /> echo $CMENU<br /> sleep 4<br /> FUNC_menu<br /> fi<br />}</p>
<p>#++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br /># メイン処理<br />#&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />FUNC_menu</p><p>The post <a href="https://blog.rurineko.com/archives/3687">正規表現チェッカー？を作ってみた。</a> first appeared on <a href="https://blog.rurineko.com">～下町物語～</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
