問題45204について

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-9-28 10:23
maki_nemui  長老   投稿数: 42
以下の「test.txt」ファイルのうち、「#」を含む行のみがマッチするパターンを選びなさい。(全て選択)
以上のような問題で回答では正規表現での判断となってました。

メタキャラクターはファイルの名前の検索時に使用する
正規表現や拡張正規表現は、grepなどのファイル内の内容に関する検索に使用と考えてよろしいのでしょうか?

今回ファイルの「#」を含む行となっているため内容ということがわかり正規表現での判断と考えられるのですが、考え方が違う場合、メタキャラクタと正規表現をどのように使い分けたらいいのか判断がつかないため教えて頂きたいです。

今回の質問を以下にまとめます。
1.メタキャラクターはファイルの名前の検索時に使用し、
正規表現や拡張正規表現は、grepなどのファイル内の内容に関する検索に使用するという考え方で正しいのか?
2.1.の考え方が間違っていた場合、メタキャラクタと正規表現の見分け方についてどのようにするのか?
以上になります。

ご指導よろしくお願いします。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-9-28 12:41 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
1.メタキャラクターはファイルの名前の検索時に使用し、
正規表現や拡張正規表現は、grepなどのファイル内の内容に関する検索に使用するという考え方で正しいのか?
2.1.の考え方が間違っていた場合、メタキャラクタと正規表現の見分け方についてどのようにするのか?
もう少し広くとらえてみてください。

「メタキャラクターはファイルの名前の検索時に使用」するのは間違っていないですが、そもそもその「メタキャラクター」を解釈するのは誰でしょうか。
そして、「正規表現や拡張正規表現は、grepなどのファイル内の内容に関する検索に使用」も、「正規表現や拡張正規表現」を解釈するのは誰でしょうか。

使い分け、見分け方ではなく「誰がそれを解釈するのか」で考えると良いと思います。

例えば例を示します(「パイプとリダイレクト」をまだ学習されてなかったらごめんなさい)。
$ ls -1 / | grep '^h'
home
ここで grep は「ファイル内の内容に関する検索」をしているでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-9-28 13:30
maki_nemui  長老   投稿数: 42
arashi1977さん返答ありがとうございます。

引用:
「メタキャラクターはファイルの名前の検索時に使用」するのは間違っていないですが、そもそもその「メタキャラクター」を解釈するのは誰でしょうか。
そして、「正規表現や拡張正規表現は、grepなどのファイル内の内容に関する検索に使用」も、「正規表現や拡張正規表現」を解釈するのは誰でしょうか。

使い分け、見分け方ではなく「誰がそれを解釈するのか」で考えると良いと思います。

引用:
$ls -l / | grep '^h'
これは、ルートディレクトリの一覧表示後、その一覧から先頭がhの行を検索していると考えたらいいのでしょうか?

上の例から考えると、メタキャラクタは名前などの検索に使われて、正規表現はコマンドやファイル内といった出力された内容に対しての検索に使われるという感じなのでしょうか?

すみません。調べたのですが、誰がそれを読み込むかというのがわかりませんでした。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-9-28 13:54 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
引用:
$ls -l / | grep '^h'
これは、ルートディレクトリの一覧表示後、その一覧から先頭がhの行を検索していると考えたらいいのでしょうか?
そうです。一覧の中から、ですね。

引用:
上の例から考えると、メタキャラクタは名前などの検索に使われて、正規表現はコマンドやファイル内といった出力された内容に対しての検索に使われるという感じなのでしょうか?
惜しい。「誰が解釈するか」を意識するのです。「何のために使うか」という観点ではありません。
「何に、どのような指示をする、そうするとどのような結果が得られる」といううちの「何に」の理解が浅いために起きている疑問だと思います。

ここで言うメタキャラクタは「bash(シェル)」が解釈するものです。シェルはファイルの中身を検索したりするものではなく、コマンドを実行したり実行するために必要な情報(ファイル名、ディレクトリ名など)を扱います。

また、 maki_nemui さんが意識されている「正規表現や拡張正規表現」は「grep」の引数として使用していることからも分かる通り、ここでは「grepコマンド」が解釈します。grepコマンドは受け取った文字列や指定されたファイルの中を、指定されたキーワード(正規表現を含む)によって検索するツールです。

もう一度「誰がそれを解釈するのか」を意識してみてください。
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-9-28 14:45
maki_nemui  長老   投稿数: 42
引用:
ここで言うメタキャラクタは「bash(シェル)」が解釈するものです。シェルはファイルの中身を検索したりするものではなく、コマンドを実行したり実行するために必要な情報(ファイル名、ディレクトリ名など)を扱います。

また、 maki_nemui さんが意識されている「正規表現や拡張正規表現」は「grep」の引数として使用していることからも分かる通り、ここでは「grepコマンド」が解釈します。grepコマンドは受け取った文字列や指定されたファイルの中を、指定されたキーワード(正規表現を含む)によって検索するツールです
なるほど。メタキャラクタは「bash(シェル)」などのスクリプトが解釈するもので、正規表現や拡張正規表現は、スクリプト内で実行されるコマンドが解釈するということなんですね。

頭でモヤモヤしてたのが晴れました。
ありがとうございます

なし Re: 問題45204について

msg# 1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-9-28 15:49 | 最終変更
arashi1977  長老 居住地: 広島  投稿数: 1715
引用:
なるほど。メタキャラクタは「bash(シェル)」などのスクリプトが解釈するもので、正規表現や拡張正規表現は、スクリプト内で実行されるコマンドが解釈するということなんですね。
一部誤解があるので。

メタキャラクタは「bash(シェル)」などのスクリプトが解釈するもの
→スクリプト(=シェルスクリプト)はbashなどの「シェル」が解釈するものです。メタキャラクタを解釈するのは「シェル」です。

正規表現や拡張正規表現は、スクリプト内で実行されるコマンドが解釈する
→「スクリプト内で実行されるコマンド」ではなく、「コマンド」が単独で解釈します。(じゃないと私が↑で例示した「$ ls -1 / | grep '^h'」が成り立たない。)

なし Re: 問題45204について

msg# 1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-9-28 16:40
maki_nemui  長老   投稿数: 42
引用:
メタキャラクタは「bash(シェル)」などのスクリプトが解釈するもの
→スクリプト(=シェルスクリプト)はbashなどの「シェル」が解釈するものです。メタキャラクタを解釈するのは「シェル」です。

正規表現や拡張正規表現は、スクリプト内で実行されるコマンドが解釈する
→「スクリプト内で実行されるコマンド」ではなく、「コマンド」が単独で解釈します。(じゃないと私が↑で例示した「$ ls -1 / | grep '^h'」が成り立たない。)
シェル文法で作られたスクリプトはシェルが解釈し、
メタキャラクタ(メタ文字)もシェルが解釈するが、スクリプトとメタキャラクタは全く違うものということでよろしいでしょうか?

すみません。スクリプトというものを理解できていませんでした。

なし Re: 問題45204について

msg# 1.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2020-9-28 16:58
arashi1977  長老 居住地: 広島  投稿数: 1715
「スクリプト」とは本来「台本」のことですが、「処理の内容を記述したもの」です。ざっくり言い換えるなら「プログラム」です。
http://e-words.jp/w/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88.html

スクリプトの例としては
#!/bin/bash
clear
echo "Let's Study!"
みたいな感じでしょうか。
(内容を理解して処理するのは /bin/bash、clearで画面を一旦初期化して、echoでLet's Study! って表示する)

メタキャラクタとはざっくりいうと「その文字そのものとは違う機能(意味)を持つ特殊文字」であり「シェルはメタキャラクタをそのままの"文字"ではなく"ある意味を持った特殊文字"として理解する」のです。
例えば「*」って、文字としては「アスタリスク」と呼ばれるものですがメタキャラクタとしては「0文字以上の何でも」ですし、「?」は「クエスチョンマーク(疑問符)」が「任意の一文字」という別の意味を持ちます。

引用:
すみません。スクリプトというものを理解できていませんでした。
そうですね、スクリプトは102の範囲のはず。
「スクリプト」を普通に使われてるので理解されているものだとおもっていたのですが、この質問自体は101のものでしたね

なし Re: 問題45204について

msg# 1.1.1.1.1.1.1.1.1
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2020-9-29 8:47
maki_nemui  長老   投稿数: 42
引用:
メタキャラクタとはざっくりいうと「その文字そのものとは違う機能(意味)を持つ特殊文字」であり「シェルはメタキャラクタをそのままの"文字"ではなく"ある意味を持った特殊文字"として理解する」のです。
例えば「*」って、文字としては「アスタリスク」と呼ばれるものですがメタキャラクタとしては「0文字以上の何でも」ですし、「?」は「クエスチョンマーク(疑問符)」が「任意の一文字」という別の意味を持ちます
メタキャラクタに対して言い換えるとシェル以外ではメタキャラクタは特殊文字として機能しないということですね。
引用:
そうですね、スクリプトは102の範囲のはず。
「スクリプト」を普通に使われてるので理解されているものだとおもっていたのですが、この質問自体は101のものでしたね
はい、そうなんです。そう考えるとスクリプトを理解すると更にイメージしやすくなるということですかね

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.