在windows下使用sed取代雙引號之問題 - Linux

Table of Contents

大家好
小弟有個c的 rename.h檔
系統是winxp sp3

內容可能是
#define _MYFILENAME_STR "text.exe"

我想把他做成批次檔的變數
也就是
set _MYFILENAME_STR=text.exe
放入.bat檔以後供後續指令指定檔名時可用



由於裡面可能有多個\t(tab) 與" "(空白)
所以我想到的方式是


grep FILENAME_STR rename.h > 1.tmp
-> 1.tmp 內容
---------------
#define MYFILENAME_STR "text.exe"
---------------

sed s/\t//g 1.tmp > 2.tmp
-> 2.tmp 內容
---------------
#define MYFILENAME_STR "text.exe"
---------------

sed s/" "//g 2.tmp > 3.tmp
-> 3.tmp 內容
---------------
#defineMYFILENAME_STR"text.exe"
---------------

sed s/#define/"set "/g 3.tmp > 4.tmp
-> 4.tmp 內容
---------------
set MYFILENAME_STR"text.exe"
---------------

sed s/_STR\"/_STR=/g 4.tmp > 5.tmp
-> 錯誤訊息如下
---------------
set MYFILENAME_STR=text.exe"
sed: can't read >: Invalid argument
sed: can't read 5.tmp: No such file or directory
---------------

sed s/\"//g 5.tmp>out.bat
-> 這步就沒做了

想請教一下這種狀況是什麼錯誤呢 感覺是雙引號的問題
但是我怎麼改都失敗

另外我想要不產生中間的tmp檔
改以使用| 該怎麼下指令給sed好呢
感謝

--

All Comments

Caroline avatarCaroline2012-10-11
試試 grep "FILENAME_STR" 檔名.h | 加上下面那一行
awk '{print "set "$2"="$3}' | tr -d "\""
Valerie avatarValerie2012-10-12
可以耶 但是現在變成我要找怎麼把TR後的結果OUT到.BAT
檔 我再研究一下 感謝
Joe avatarJoe2012-10-13
再加上> 檔名.bat 就可以
David avatarDavid2012-10-15
TR不給我 > 檔名 他好像把 > xxx.bat 當參數了
Hardy avatarHardy2012-10-18
請問你是在什麼平台用什麼軟體執行shell?
Joseph avatarJoseph2012-10-23
WinXP 我.exe是網路上找到的 想說這問比較有人在用
Kyle avatarKyle2012-10-24
抱歉我貼一下
Dorothy avatarDorothy2012-10-24
你把tr -d "\"" 改為tr -d "\^"" 試試看
Tom avatarTom2012-10-28
|tr -d "\^"" > test.bat 還是 tr: too many arguments
Robert avatarRobert2012-11-02
兩邊的tr.exe大小不同 但是--help都沒版本 說明好像一
Anthony avatarAnthony2012-11-04
那把tr -d "\""改為sed "s/\^"//g" 試試看
Lauren avatarLauren2012-11-06
sed "s/\^"//g" 去不掉雙引號 sed "s/\"//g" 可以
但是依然不能 >到檔案 sed: can't read >: Invalid arg
Heather avatarHeather2012-11-06
sed: can't read >: Invalid argument
Hedy avatarHedy2012-11-09
你把tr -d "\""改為tr -d \^" 試試看
Queena avatarQueena2012-11-10
喔喔 有辦法 \x22 \x20 \x27 用ascii code就不會被
Agatha avatarAgatha2012-11-11
弄混了 "\x22 \x20 \x27" 這樣就很容易看懂