iT邦幫忙

0

grep與sed指令切換環境使用

各位好
我有一些linux環境的指令,是用來記錄與刪除不在svn版本控管下的檔案
指令如下:

for /f %%i in ('svn status D:\AppServ\www\website --no-ignore ^| grep -e '^?.*\.php' ^| grep -v temp ^| sed 's/^? *//'') do echo %date% %time% %%i>> D:\hack\log\log.txt
for /f %%i in ('svn status D:\AppServ\www\website --no-ignore ^| grep -e '^?.*\.php' ^| grep -v temp ^| sed 's/^? *//'') do del /F %%i

我要將這些指令在windows環境,使用批次檔bat來執行
我有安裝了GNU,但執行語法後,會有錯誤

sed: -e expression #1, char 1: unknown command: `''

從這個錯誤訊息中,我無法分辨出什麼訊息
不知道是哪個環節有問題,亦或是版本有安裝異常?

想請教各位專家是否有什麼建議的方向
又或者,有辨法將這些這些linux指令改造成window可以用的指令呢?
萬分感謝

DanSnow iT邦好手 1 級 ‧ 2021-09-29 09:54:38 檢舉
我記得沒錯的話 windows 的參數不是一定要用雙引號嗎?
nwm310 iT邦新手 4 級 ‧ 2021-09-30 08:31:00 檢舉
grep sed 要用雙引號
breakgod iT邦新手 2 級 ‧ 2021-10-01 08:33:23 檢舉
謝謝你,原來答案遠在天邊近在眼前,雙引號搞定!!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-09-29 10:09:28
最佳解答

^|都改成|試試看

for /f %%i in ('svn status D:\AppServ\www\website --no-ignore | grep -e '^?.*\.php' | grep -v temp | sed 's/^? *//'') do echo %date% %time% %%i>> D:\hack\log\log.txt

for /f %%i in ('svn status D:\AppServ\www\website --no-ignore | grep -e '^?.*\.php' | grep -v temp | sed 's/^? *//'') do del /F %%i
看更多先前的回應...收起先前的回應...
breakgod iT邦新手 2 級 ‧ 2021-09-29 10:27:06 檢舉

我有試著使用這方法,但系統回應這樣的結果,感覺有些混亂XD

D:\AppServ\www\website >for /f %%i in ('svn status D:\AppServ\www\Alumni --no-ignore | grep -e '^?.*\.php' | grep -v temp | sed 's/^? *//'') do echo %date% %time% %%i>> D:\hack\log\log.txt
這個時候不應有 %%i。

D:\AppServ\www\website >for /f %i in ('svn status D:\AppServ\www\website  --no-ignore | grep -e '^?.*\.php' | grep -v temp | sed 's/^? *//'') do echo %date% %time% %i>> D:\hack\log\log.txt
這個時候不應有 |。

試試看

for /f %i in ("svn status D:\AppServ\www\website  --no-ignore | grep -e '^?.*\.php' | grep -v temp | sed 's/^? *//'") do echo %date% %time% %i>> D:\hack\log\log.txt

再不行就先從這樣開始
成功再慢慢加回去

for /f %i in ("svn status D:\AppServ\www\website  --no-ignore") do echo %date% %time% %i>> D:\hack\log\log.txt 
breakgod iT邦新手 2 級 ‧ 2021-09-29 10:51:12 檢舉

感謝您的答覆,但這個結果與我所期望的有所出路
指令如此改寫後,會抓到的是.svn的檔案,但該檔案是系統的,不該被刪除
我有在專案中加入一個123.php的檔案,該檔案沒有在svn版本控管中,但卻沒有被記錄也沒有被刪除 ,感到困惑QQ

D:\AppServ\www\website>for /f %i in ("svn status D:\AppServ\www\website --no-ignore | grep -e '^?.*\.php' | grep -v temp | sed 's/^? *//'") do echo %date% %time% %i>> D:\hack\log\log.txt

D:\AppServ\www\website>echo 2021/09/29 週三 10:47:00.75 svn 1>>D:\hack\log\log.txt

D:\AppServ\www\website>for /f %i in ("svn status D:\AppServ\www\website --no-ignore ^| grep -e '^?.*\.php' ^| grep -v temp ^| sed 's/^? *//'") do del /F %i

D:\AppServ\www\website>del /F svn
找不到 D:\AppServ\www\website\svn

嗯,那就等待真正高手回答的正確答案了...

breakgod iT邦新手 2 級 ‧ 2021-09-29 11:17:33 檢舉

謝謝您~

我要發表回答

立即登入回答