No.5ベストアンサー
- 回答日時:
今までの質問者の補足を見ると、やはり勘違いしていますね。
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/6i5 …
(man cp)
http://docs.sun.com/app/docs/doc/817-0689/6mgfkp …
(man csh)
SFUが設置されていた時は、たぶんcshを使用していたと思います。
パスさえ通っていれば、cmd でもcshでも、どちらでもコマンドは使用可能ですね。
とりあえず
cmd /?
cp -h
csh -h
などで確認しましょう。対応しているシェルかコマンドを使えば問題ありません。
ご連絡ありがとうございます。
確かに誤解ですね。失礼しました。
コマンド単体で正規表現を使うことはできないということですね。
Cshの環境も踏まえて、同じ処理をしたいのであれば、
コマンド単体で処理することはできないので
Csh環境などが必要で、だとすればSFUやcygwinなど
必要になるということなのですか。
正規表現を使うための方法としてどのような方法があるのでしょうか。
SFU?cygwin?
windowsXP(32bit,64bit)
windows7pro
上記のOSで利用できるものとしては何がありますでしょうか?
お手数ですがよろしくお願いいたします。
No.4
- 回答日時:
ファイル名展開ですが。
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が手っ取り早く簡単に利用できるように思えてきました。
皆様、ご連絡いただき感謝です。
No.3
- 回答日時:
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でファイルを受け取るプログラムが稼働しているので、このプログラムの変更はしたくない。
No.2
- 回答日時:
いや初めて知りました。
というか、たぶん知ってたのに使っていませんでした。確かに、
cp *.txt /tmp
とかって使ってますね。
UNIXだけでなく、DOSも使えるような感じですが。
http://kmuto.jp/tutorial/node11.html
コマンドプロンプトでは使えないんですかね。
Cygwinを入れてみたら、いかがでしょうか。
http://www.cygwin.com/
ご連絡ありがとうございます。
windowsではcopyでは*とか?とかしか使ったことが無く
[0-9]などと入力しても、処理されませんでした。
cygwinも検討する必要ありですね。
有難うございました。
No.1
- 回答日時:
>cp等で正規表現が使えなくなったようです
言っている事が、よくわかりません。単にシェルが変わったかでないですか?
csh とかshとか使っていませんでした?
cpで正規表現を使うというのが分かりません。cpには元々そんな機能ありました?
たぶんシェルの話をしているのではないかと創造していますが?
ご連絡ありがとうございます。
意味がわからなかったようで、色々なことを創造させてしまい
申し訳ありません。説明させていただきます。
もともとsolarisのcsh環境でcp をする際に
cp TEST[1-9] . など
正規表現を利用しておりました。
windowsで同等の環境を利用したかったのでSFUをインストールし
使いました。SFUをインストールしていた際には
コマンドプロンプトでも正規表現を使ってファイルのコピーができました。
ただ訳あってSFUをアンインストールしたら、コピーで正規表現が使えなくなりました。
何かいい方法がありませんか?
dosでfindstrというコマンドで正規表現があるようですが・・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Mac OS El Capitanがインストールできない… 1 2023/06/16 13:05
- オープンソース csvデータのダブルクォーテーションで囲まれた文字内にあるカンマを削除したい 3 2022/09/02 15:17
- その他(コンピューター・テクノロジー) ffmpeg 動画から複数の箇所を指定して、一度の作業で同時に切り出したい 1 2022/07/03 08:35
- バッテリー・充電器・電池 iPhoneX Rバッテリー交換についての質問です。 現在iPhoneXRを3年使用しています。最近 1 2022/11/04 16:51
- 数学 正規数の定義で分からないことがあります。 正規数の定義について専門書において 「xがr進正規であると 1 2023/07/17 20:50
- Java JAVAの1つの正規表現で上記Textすべてと合致する正規表現を教えてください。 4 2022/11/06 08:46
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- その他(SNS・コミュニケーションサービス) Yahoo知恵袋とYahooショッピングでYahoo IDを2回変更しました、新規作成も2回以上して 2 2022/07/25 12:46
- UNIX・Linux Linuxについて質問です。 シェルスクリプト名をfind.shとして、以下の条件をすべて満たすファ 1 2023/02/03 03:50
- その他(コンピューター・テクノロジー) 正規表現の置換で数値を合計したいです。 2 2022/10/17 11:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[バッチファイル]レジストリ値...
-
Ctrl+Zで戻りすぎた場合、逆に...
-
UNIX コマンドにおける # や円...
-
「環境変数名の編集」ウィンド...
-
SCコマンドでアクセス拒否
-
echo $!の意味を教えてください
-
VBAを使って電源を切るには?
-
dig/host/nslookup コマンド...
-
コマンドプロンプトにおけるコ...
-
コマンドプロンプトで変数内に...
-
Powershell エクセル検索 完全...
-
Linux:sedコマンドで置換がし...
-
アクセスのボタンから指定のワ...
-
solarisのdateコマンドで
-
【Gmailコマンド】1年以上前の...
-
AIXでの文字コード、改行コード...
-
ヒアドキュメントの動作
-
閉じている全ての+ボタンを一...
-
コマンドプロンプトでMsgを送信...
-
windows10を使っています。 wsl...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UNIX コマンドにおける # や円...
-
【Gmailコマンド】1年以上前の...
-
SCコマンドでアクセス拒否
-
コマンドプロンプト tree
-
[バッチファイル]レジストリ値...
-
Excel下部のメニューが消えた
-
Ctrl+Zで戻りすぎた場合、逆に...
-
AIXでの文字コード、改行コード...
-
ワイルドカードを使ってでフォ...
-
コマンド履歴が~/.bash_history...
-
アクセスのボタンから指定のワ...
-
echo $!の意味を教えてください
-
vbaで「最前面に」とする方法は?
-
コマンドプロンプトにおけるコ...
-
shutdownコマンドをキャンセル...
-
Linuxコマンドは何の言語で書か...
-
「環境変数名の編集」ウィンド...
-
Linuxでコマンドが終了しない
-
相手PCのMACアドレスを知るため...
-
compressコマンドってなくなっ...
おすすめ情報