Discussion:
[問題] 在windows下使用sed取代雙引號之問題
(时间太久无法回复)
Bad_To_The_Bone
2012-10-08 08:32:17 UTC
Permalink
大家好
小弟有個c的.h檔
內容可能是
#define _MYFILENAME_STR "text.exe"

我想把他做成批次檔的變數
也就是
set _MYFILENAME_STR=test.exe

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

grep FILENAME_STR FILENAME_STR 檔名.h > 1.tmp
sed s/\t//g 1.tmp > 2.tmp
sed s/" "//g 2.tmp > 3.tmp
sed s/#define/"set "/g 3.tmp > 4.tmp
sed s/_STR\"/_STR=/g 4.tmp > 5.tmp
sed s/\"//g 5.tmp>out.bat

但是到了sed s/_STR\"/_STR=/g 4.tmp > 5.tmp的時候
D:\>sed "s/_STR\"/_STR=/g" 4.tmp > 5.tmp
set _MYFILENAME_STR=test.exe"
sed: can't read >: Invalid argument
set _MYFILENAME_STR=test.exe"


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

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

--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.39.210.127
※ 編輯: donkeychen 來自: 114.39.210.127 (10/08 16:32)
鵟.騎士
2012-11-16 09:29:50 UTC
Permalink
Post by Bad_To_The_Bone
大家好
小弟有個c的.h檔
內容可能是
#define _MYFILENAME_STR "text.exe"
我想把他做成批次檔的變數
也就是
set _MYFILENAME_STR=test.exe
由於裡面可能有多個\t(tab) 與" "(空白)
所以我想到的方式是
grep FILENAME_STR FILENAME_STR 檔名.h > 1.tmp
sed s/\t//g 1.tmp > 2.tmp
sed s/" "//g 2.tmp > 3.tmp
sed s/#define/"set "/g 3.tmp > 4.tmp
sed s/_STR\"/_STR=/g 4.tmp > 5.tmp
sed s/\"//g 5.tmp>out.bat
但是到了sed s/_STR\"/_STR=/g 4.tmp > 5.tmp的時候
D:\>sed "s/_STR\"/_STR=/g" 4.tmp > 5.tmp
set _MYFILENAME_STR=test.exe"
sed: can't read >: Invalid argument
set _MYFILENAME_STR=test.exe"
想請教一下這種狀況是什麼錯誤呢 感覺是雙引號的問題
但是我怎麼改都失敗
另外我想要不產生中間的tmp檔
改以使用| 該怎麼下指令給sed好呢
只知道 powershell 環境下可以這樣:
[PATH]sed 's/[ \t]//g;s/\"//g;s/#define/set /g;s/_STR/_STR=/g'
[PATH]filename1 > [PATH]filename2
--
⊙翱翔青空.傲視大地⊙
Loading...