Re: 問題ID:10885について
arashi1977
居住地: 広島
投稿数: 1715
引用:この設問の形式の場合、grepとしては違いはありませんがシェルとしては扱いが異なります。
参考を見てみましょう。
引用:
問題ID:10486あたりを見ていただくとわかるのですが、コマンドに文字列を渡す前に、まずシェルが自分で文字列を先に解析して処理するんですね。なのでシングルクォーテーションが
・あり:「1234.」という文字列をgrepに渡す
・なし:1234. をシェルが解析し、解析後の文字列として「1234.」を渡す
という動きの違いがあります。
実例としては以下のパターンを見ていただくとわかりやすいかもです。
「2の次に空白(スペース)と何らかの文字がある」行を検索するつもりです。
当然ですが、以下は要件通りに検索できますよね?「2 .(正規表現の任意の1文字)」を指定していますので。
じゃあシングルクォーテーションで囲まなかったら?
シェルは「grepの第1引数を”2"、第2引数を".(カレントディレクトリ)"、第3引数を"test2.txt"」と解析して渡しますので、以下のようにディレクトリから「2」という文字列を検索するのとtest2.txtから「2」という文字列を検索するという2つの処理をするよう指示したことになります。
このように、「シェルにどういった文字列を渡して、それを解析して、コマンドを実行させるのか」という観点で考える必要があるんですね。
いかがでしょうか?
シングルクォーテーションありの場合となしの場合では、
何か違いがあるのでしょうか…
参考を見てみましょう。
引用:
正規表現は明示的に「'」(シングルクォーテーション)や「"」(ダブルクォーテーション)の引用符で囲う事ができます。これらの引用符で囲まれた正規表現の記号は、シェルにメタキャラクタとして扱われなくなります。
問題ID:10486あたりを見ていただくとわかるのですが、コマンドに文字列を渡す前に、まずシェルが自分で文字列を先に解析して処理するんですね。なのでシングルクォーテーションが
・あり:「1234.」という文字列をgrepに渡す
・なし:1234. をシェルが解析し、解析後の文字列として「1234.」を渡す
という動きの違いがあります。
実例としては以下のパターンを見ていただくとわかりやすいかもです。
$ cat test2.txt
123
12 3
1233
12 44
123445
01 3499
当然ですが、以下は要件通りに検索できますよね?「2 .(正規表現の任意の1文字)」を指定していますので。
$ grep '2 .' test2.txt
12 3
12 44
じゃあシングルクォーテーションで囲まなかったら?
シェルは「grepの第1引数を”2"、第2引数を".(カレントディレクトリ)"、第3引数を"test2.txt"」と解析して渡しますので、以下のようにディレクトリから「2」という文字列を検索するのとtest2.txtから「2」という文字列を検索するという2つの処理をするよう指示したことになります。
$ grep 2 . test2.txt
grep: .: ディレクトリです
test2.txt:123
test2.txt:12 3
test2.txt:1233
test2.txt:12 44
test2.txt:123445
このように、「シェルにどういった文字列を渡して、それを解析して、コマンドを実行させるのか」という観点で考える必要があるんですね。
いかがでしょうか?
投稿ツリー
-
問題ID:10885について
(KAzmin_44, 2015-8-2 15:01)
-
Re: 問題ID:10885について
(arashi1977, 2015-8-2 15:39)
-
Re: 問題ID:10885について
(KAzmin_44, 2015-8-2 16:26)
-
Re: 問題ID:10885について
(arashi1977, 2015-8-2 16:59)
- Re: 問題ID:10885について (KAzmin_44, 2015-8-2 20:27)
-
Re: 問題ID:10885について
(arashi1977, 2015-8-2 16:59)
-
Re: 問題ID:10885について
(KAzmin_44, 2015-8-2 16:26)
-
Re: 問題ID:10885について
(arashi1977, 2015-8-2 15:39)