[問題] 在windows下使用sed取代雙引號之問題
大家好
小弟有個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好呢
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.39.210.127
※ 編輯: donkeychen 來自: 114.39.210.127 (10/08 16:32)
推
10/08 17:01, , 1F
10/08 17:01, 1F
→
10/08 17:01, , 2F
10/08 17:01, 2F
→
10/08 17:46, , 3F
10/08 17:46, 3F
→
10/08 17:46, , 4F
10/08 17:46, 4F
推
10/08 18:02, , 5F
10/08 18:02, 5F
→
10/08 19:53, , 6F
10/08 19:53, 6F
推
10/08 20:43, , 7F
10/08 20:43, 7F
→
10/08 22:59, , 8F
10/08 22:59, 8F
→
10/08 23:02, , 9F
10/08 23:02, 9F
我上面敘述有稍微改一下 說明清楚我執行的環境
用了 rehon大大的作法
grep FILENAME_STR rename.h | awk '{print "set "$2"="$3}'
-> 顯示
--------------------
set MYFILENAME_STR="text.exe"
--------------------
grep FILENAME_STR rename.h | awk '{print "set "$2"="$3}'|tr -d "\""
-> 顯示為我想要的
--------------------
set MYFILENAME_STR=text.exe
--------------------
grep FILENAME_STR rename.h | awk '{print "set "$2"="$3}'|tr -d "\"" >rename.bat
-> 顯示
--------------------
tr: only one string may be given when deleting without squeezing repeats
--------------------
====================================================================
我自己有試過用awk來改寫
grep FILENAME_STR rename.h | awk '{print "set "$2"="$3}'|
awk 'BEGIN {FS="\""} {print $1 $2}'
-> 顯示為我想要的
--------------------
set MYFILENAME_STR=text.exe
--------------------
但是 要>到檔案
grep FILENAME_STR rename.h | awk '{print "set "$2"="$3}'|
awk 'BEGIN {FS="\""} {print $1 $2}' > rename.bat
-> 顯示
---------------------
awk: input file ">": 系統找不到指定的檔案。
awk: input file "rename.bat": 系統找不到指定的檔案。
我目前作法是
寫一個rename.awk
內容為
---------
BEGIN {
FS="\""
}
{ print $1 $2 }
---------
然後執行
grep FILENAME_STR rename.h | awk '{print "set " $2 "=" $3}'|
awk -f rename.awk > rename.bat
這樣可行 但是好像不是很漂亮
.exe的來源
http://adidas.blog.51cto.com/ext/down_att.php?aid=13730&code=7766
http://adidas.blog.51cto.com/ext/down_att.php?aid=13727&code=1909
※ 編輯: donkeychen 來自: 114.39.214.77 (10/08 23:38)
推
10/09 02:51, , 10F
10/09 02:51, 10F
→
10/09 11:59, , 11F
10/09 11:59, 11F
→
10/09 12:00, , 12F
10/09 12:00, 12F
→
10/09 12:02, , 13F
10/09 12:02, 13F
→
10/09 12:02, , 14F
10/09 12:02, 14F
推
10/09 12:43, , 15F
10/09 12:43, 15F
→
10/09 13:38, , 16F
10/09 13:38, 16F
→
10/09 13:38, , 17F
10/09 13:38, 17F
→
10/09 13:39, , 18F
10/09 13:39, 18F
推
10/09 14:18, , 19F
10/09 14:18, 19F
→
10/14 04:26, , 20F
10/14 04:26, 20F
→
10/14 04:27, , 21F
10/14 04:27, 21F