こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

sedの使い方

下記をsedで \" を置換するまたは削除する場合、どのように置換すればよろしいでしょうか。

自分では下記と想定しましたがうまくいきません。
#\"c:\WINDOWS\test.bat\" | sed s/\\\"//g
どうかお願いします。

投稿日時 - 2011-07-05 00:16:54

QNo.6854853

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

○コマンド入力時に「通常の文字扱い」させたくないなら、単に
"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では実行できないものです。

いったい、何をやりたいのでしょうか?

投稿日時 - 2011-07-05 21:35:20

お礼

回答ありがとうございます。
下記の回答どおり、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なんですか?

\"をプログラムで付加させているために困っていました。
ソースの改修はほかのソースと連動しており難しいかったためです。

意味不明ですみませんでした。
>いったい、何をやりたいのでしょうか?

投稿日時 - 2011-07-06 00:32:13

ANo.1

・実行しているのは Windowsのコマンドプロンプトでしょうか、Linuxのシェルでしょうか?
それによって、特殊文字のくくりかたとが変わってくるので。

・置換対象は\"でしょうか?それとも "でしょうか?
\"が、"の「引用符」としての意味を消すためのものなら、実際には"となりますから、置換対象も"となります。

・#\"c:\WINDOWS\test.bat\" | sed s/\\\"//gの意図するものはなんでしょう?
#はプロンプトですか?それとも入力したものですか?入力したものなら、以降はコメント扱いされそうですが。
\"c:\WINDOWS\test.bat\" は これを文字列として出力したいのですか?それならechoが必要です。
あるいはtest.batを実行したいのですか?"が通常の文字あつかいになって、ファイルが存在しない、となりそうですが。

投稿日時 - 2011-07-05 03:45:08

補足

回答ありがとうございます。
Linuxのシェルになります。
置換対象は\"になります。
#はプロンプトになります。
\"c:\WINDOWS\test.bat\"でtest.batを実行したいです。
通常の文字あつかいになって、ファイルが存在しない、となるため、
\"を置換したいのです。
実際`\"c:\WINDOWS\test.bat\"‘は存在しないと出力されます。

投稿日時 - 2011-07-05 07:13:20

あなたにオススメの質問