- 締切済み
sedの使い方
下記をsedで \" を置換するまたは削除する場合、どのように置換すればよろしいでしょうか。 自分では下記と想定しましたがうまくいきません。 #\"c:\WINDOWS\test.bat\" | sed s/\\\"//g どうかお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
○コマンド入力時に「通常の文字扱い」させたくないなら、単に "c:\WINDOWS\test.bat" と入力するだけのことです。「置換」なんて必要無いです。ただし、"の中では\は特殊な意味を持つので "c:\\WINDOWS\\test.bat" と\でエスケープするか 'C:\WINDOWS\test.bat' とシングルクオートでくくります。 以上は、シェルでの コマンド行の入力方法について ○ | (パイプ)はパイプの前のコマンドの出力を、パイプの後のコマンドの入力にするものです。 sedは入力に対して引数で与えられたテキスト編集処理を行うコマンドです。 \"c:\WINDOWS\test.bat\" | sed s/\\\"//g では \"c:\WINDOWS\test.bat\" というコマンドの出力を、sedの入力として処理する、という意味になります。 「\"c:\WINDOWS\test.bat\" という文字列を、sedの入力として処理する」ではありません。 そうしたいのなら「文字列を出力するコマンド」(echo等)で\"c:\WINDOWS\test.bat\"を出力し、それをパイプでsedに入力する、という方法を取る必要があります。 以上は、パイプについて ○で、一番謎なところですが > \"c:\WINDOWS\test.bat\"でtest.batを実行したいです。 あの...Linuxなんですか?Windowsなんですか? Linuxでは\をパス区切りには使わないし、C:なんて「ドライブ」もありません。WINDOWSなんてディレクトリも普通はありません。例え、\"について解決しても、 c:\WINDOWS\test.bat なんて(通常は)存在しないファイルにアクセスできるわけがありません。 Windowsと共有とかで繋がっているとしても、Windowsのパスはそのままでは使えず、Linuxでのディレクトリ表現で表わされる場所(~/c/WINDOWS/test.bat という感じに)になっているはずです。 また、拡張子通りなら、test.batはWindows用のバッチファイルで、コマンドプロンプト上で無いと動作しない,つまりLinuxでは実行できないものです。 いったい、何をやりたいのでしょうか?
- kmee
- ベストアンサー率55% (1857/3366)
・実行しているのは Windowsのコマンドプロンプトでしょうか、Linuxのシェルでしょうか? それによって、特殊文字のくくりかたとが変わってくるので。 ・置換対象は\"でしょうか?それとも "でしょうか? \"が、"の「引用符」としての意味を消すためのものなら、実際には"となりますから、置換対象も"となります。 ・#\"c:\WINDOWS\test.bat\" | sed s/\\\"//gの意図するものはなんでしょう? #はプロンプトですか?それとも入力したものですか?入力したものなら、以降はコメント扱いされそうですが。 \"c:\WINDOWS\test.bat\" は これを文字列として出力したいのですか?それならechoが必要です。 あるいはtest.batを実行したいのですか?"が通常の文字あつかいになって、ファイルが存在しない、となりそうですが。
補足
回答ありがとうございます。 Linuxのシェルになります。 置換対象は\"になります。 #はプロンプトになります。 \"c:\WINDOWS\test.bat\"でtest.batを実行したいです。 通常の文字あつかいになって、ファイルが存在しない、となるため、 \"を置換したいのです。 実際`\"c:\WINDOWS\test.bat\"‘は存在しないと出力されます。
お礼
回答ありがとうございます。 下記の回答どおり、echoで出力し、置換させました。 #echo \"c:\\WINDOWS\\test.bat\" > test.bat #cat test.bat "c:\WINDOWS\test.bat" echo することで\"の\が削除でき、実行できました。 [remote]#rsh hostname \"c:\WINDOWS\test.bat\" >「\"c:\WINDOWS\test.bat\" という文字列を、sedの入力として処理する」ではありません。 >そうしたいのなら「文字列を出力するコマンド」(echo等)で\"c:\WINDOWS\test.bat\"を出力し、そ>れをパイプでsedに入力する、という方法を取る必要があります。 Linuxと書いたのですが、実はWindowsのSUAになります。ただ作りはkorn、cshシェルになるため、 Linuxと書いてしまいました。すいません。 >あの...Linuxなんですか?Windowsなんですか? \"をプログラムで付加させているために困っていました。 ソースの改修はほかのソースと連動しており難しいかったためです。 意味不明ですみませんでした。 >いったい、何をやりたいのでしょうか?