- ベストアンサー
正規表現について
copy 等では正規表現は使えないのでしょうか。 UNIX環境が必要でSFUを入れましたが何かと面倒なので GNU等で必要なコマンドを用意しました。 ただ、SFUをアンインストールした時点で cp等で正規表現が使えなくなったようです。 copyを使うよりはUNIXのコマンドで正規表現を使います。 何か良い方法はありませんでしょうか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
今までの質問者の補足を見ると、やはり勘違いしていますね。 No3の方の言うとおりで、copy やcp コマンドには正規表現を使う仕様は提供していません。これは copy /? cp -h or -? man cp で見ると分かると思います。その反面、 cmd /? man csh man sh csh -h sh -h で使い方などをみると、コマンドラインでのキャラクター文字でメタ文字として解釈する使い方が紹介されています。Windowsの例を挙げると、 ------------------- 引用符が必要な特別な文字は次のとおりです: <スペース> &()[]{}^=;!'+,`~ ------------------------- となっており、質問者が使用していた[1-9]などの使い方は、コマンド側があえて提供していない限り(正規表現が使用できると言っている場合)、引用符が必要な特別なキャラクター文字です。使い方はヘルプを見てください(/Fオプションです)。 上記のように、コマンドラインでその文字列がどのように解釈されるかはシェルの仕様です。だから、UNIX上でできた事が、Windows上のCMDでできないのは当たり前の事です。 なので、copy /? でわかるように、正規表現としてのメタ文字は *. ? しか提供されていません。copy側が*をワイルドカードとして認識して、動作するように作られているだけです。これを正規表現に対応したとは言えず、通常「ワイルドカードに対応している」といいます。例えば、サブフォルダーにabcフォルダーがある場合、 cd *bc はVista以降のCMDなら可能です。 これは単に*, ?をワイルドカードとして使用できる仕様になっているためで、正規表現に対応したことにはなりません。 実際にcpのman ヘルプなり、下記のURLで確認しても使い方をみると特に正規表現の使用の提供はしていません。逆にcshなどのmanを見ると// [] !// の特殊な(正規表現)使い方ができる事が記載されています。シェル側で対応していない限り、シェル側はただのキャラクター文字として渡すのみで、対応していると、メタ文字として渡すので、コマンド側が対応していない限り引用符が必要です。 http://docs.sun.com/app/docs/doc/802-1930-01/6i5u959eu?l=ja&a=view&q=man+command+cp (man cp) http://docs.sun.com/app/docs/doc/817-0689/6mgfkpcls?l=ja&a=view&q=command+csh (man csh) SFUが設置されていた時は、たぶんcshを使用していたと思います。 パスさえ通っていれば、cmd でもcshでも、どちらでもコマンドは使用可能ですね。 とりあえず cmd /? cp -h csh -h などで確認しましょう。対応しているシェルかコマンドを使えば問題ありません。
その他の回答 (5)
- Tacosan
- ベストアンサー率23% (3656/15482)
そうそう, 今は SFU じゃなくって SUA っていうらしいよ. 名前が違うだけ, でもないみたい.
- kmee
- ベストアンサー率55% (1857/3366)
ファイル名展開ですが。 Unixやそれに準じた環境では、ファイル名展開はシェルの仕事です。 cp /home/A/T[1-4] /home/B/ とシェル(shとかcshとか)のコマンドラインに入力すると、そのシェルが条件にあったファイルを探し cp /home/A/T1 /home/A/T2 /home/A/T4 /home/B/ (/home/A/の下に T1, T2, T4がある,T3は無い場合) と展開した上で各コマンド(この場合はcp)に渡します。 コマンド自身が展開する場合もありますが、cp等はシェルまかせで自身では何もしません 対し、Windowsのコマンドプロンプトでは、上のような展開はしません。*などの解釈は各コマンドで行います。よって、自身ではなにもしないcpを「cp /home/A/T[1-4] /home/B/」と実行しても、そのまま「/home/A/T[1-4]」というファイル名だと思って実行しようとします。 unixからwindowsにコマンドを移植する際には、この違いを吸収するために、ファイル名展開機能を追加している場合ばあります。 「GNU等で必要なコマンドを用意しました」ということなので、ソースからコンパイルしたのだと思います。だとすると、自前の展開機能は無いと思われます。 SFUは使ったことないのですが、コマンドプロンプトではなくunix由来のシェルを使っていたのでしょう。 解決策ですが (1)コマンドプロンプトではなく、bash,tcsh等のシェルのWindows移植版を使う。 (2)GNUのコマンド群は廃棄して、ファイル名展開機能を追加したWindows移植版のcp等を使う。 (3)GNUのコマンド群は廃棄して、Cygwinをインストールし、コマンドもCygwinのものを使う。 (4)SFUをインストールしなおす。 あたりではないでしょうか。 SFUでコンパイルしたのなら、SFUを使うのが無難だと思います。
お礼
ご連絡ありがとうございます。 教えていただいたことを参考にしたいと思います。 有難うございました。 cygwinをインストールしましたが・・・ 難しいです。挫折しそうです。 SFUが良かったのでしょうか。 windows powershellを試してみましたが windows7上のものはよさそうでしたが wwindowsXPにインストールしましたが・・・ aliasのようにbat化したものが、利用できません。・・・・ SFUが手っ取り早く簡単に利用できるように思えてきました。 皆様、ご連絡いただき感謝です。
- Tacosan
- ベストアンサー率23% (3656/15482)
copy では正規表現は使えません. もっというと, cp でも「正規表現」は使えないです. きっと何かの勘違いでしょう. で私も #1 と同様, あなたの言わんとしていることが (#1 にたいするお礼を読んでもなお) よくわかりません. 特に, Solaris と GNU と SFU の関係が全く理解できません. 最初から現在までどのようなことをしたのか (特にインストール/アンインストールについて) を時系列に沿って書いてもらえますか? あと, 「SFUをインストールしていた際にはコマンドプロンプトでも正規表現を使ってファイルのコピーができました。ただ訳あってSFUをアンインストールしたら、コピーで正規表現が使えなくなりました。」 というのがどういうことなのか, もっと詳しく書いてください. 例えば「コピー」といわれても, 使ったシェルや「コピー」のためのコマンドは読みとれないですよね.
お礼
ご連絡ありがとうございます。 混乱させてしまったようです、失礼しました。 また、正規表現が何であるかというのも、よく理解していないもので言葉の使い方が違うかもしれません。 利用方法は下記の通りです。 ファイルがT1からT9というファイルが/home/Aというフォルダにあり このフォルダの中にあるT1とT4、この二つを/home/Bというフォルダにコピー下のですが。 UNIXでは cp /home/A/T[1,4] /home/B/ と入力すると必要な2つがコピーされると思います。 同様のことをwindowsで行いたいのですが。 私の勘違いかもしれませんが,SFUをインストールしていたころは出来ましたが、アンインストールした現在では上記のい入力ではファイル2つはコピーされません。 SFUをアンインストールした理由は、CADの環境設定を利用者全員に手間無くしてもらうことと、windows7にはインストールできない(SUAがある?ultimate?が必要) UNIXのコマンドを利用したい理由として UNIXのファイルサーバに圧縮し、コピーし、という処理を行いたい。 UNIXではCshでファイルを受け取るプログラムが稼働しているので、このプログラムの変更はしたくない。
- kotoby2003
- ベストアンサー率15% (280/1754)
いや初めて知りました。というか、たぶん知ってたのに使っていませんでした。 確かに、 cp *.txt /tmp とかって使ってますね。 UNIXだけでなく、DOSも使えるような感じですが。 http://kmuto.jp/tutorial/node11.html コマンドプロンプトでは使えないんですかね。 Cygwinを入れてみたら、いかがでしょうか。 http://www.cygwin.com/
お礼
ご連絡ありがとうございます。 windowsではcopyでは*とか?とかしか使ったことが無く [0-9]などと入力しても、処理されませんでした。 cygwinも検討する必要ありですね。 有難うございました。
- 0909union
- ベストアンサー率39% (325/818)
>cp等で正規表現が使えなくなったようです 言っている事が、よくわかりません。単にシェルが変わったかでないですか? csh とかshとか使っていませんでした? cpで正規表現を使うというのが分かりません。cpには元々そんな機能ありました? たぶんシェルの話をしているのではないかと創造していますが?
お礼
ご連絡ありがとうございます。 意味がわからなかったようで、色々なことを創造させてしまい 申し訳ありません。説明させていただきます。 もともとsolarisのcsh環境でcp をする際に cp TEST[1-9] . など 正規表現を利用しておりました。 windowsで同等の環境を利用したかったのでSFUをインストールし 使いました。SFUをインストールしていた際には コマンドプロンプトでも正規表現を使ってファイルのコピーができました。 ただ訳あってSFUをアンインストールしたら、コピーで正規表現が使えなくなりました。 何かいい方法がありませんか? dosでfindstrというコマンドで正規表現があるようですが・・・・
お礼
ご連絡ありがとうございます。 確かに誤解ですね。失礼しました。 コマンド単体で正規表現を使うことはできないということですね。 Cshの環境も踏まえて、同じ処理をしたいのであれば、 コマンド単体で処理することはできないので Csh環境などが必要で、だとすればSFUやcygwinなど 必要になるということなのですか。 正規表現を使うための方法としてどのような方法があるのでしょうか。 SFU?cygwin? windowsXP(32bit,64bit) windows7pro 上記のOSで利用できるものとしては何がありますでしょうか? お手数ですがよろしくお願いいたします。