PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   七嘴八舌異言堂 (https://www.pcdvd.com.tw/forumdisplay.php?f=12)
-   -   請問正則表示式(regular expression)能做到這樣嗎? (https://www.pcdvd.com.tw/showthread.php?t=971492)

goddesschi 2012-06-06 11:26 AM

請問正則表示式(regular expression)能做到這樣嗎?
 
0x00 0x00 0x08 0x00 0x02 0x00 0x04 0x00 0x02 0xFF 0x00 0xFF 0x02 0x07 0x88 0x02 0x09

希望每隔3個0x字串就換行,也就是以下這樣
請問正則表示可以做得到嗎?或者是有沒有其他方法能夠達到這個目的

0x00 0x00 0x08
0x00 0x02 0x00
0x04 0x00 0x02
0xFF 0x00 0xFF
0x02 0x07 0x88
0x02 0x09

tbsky 2012-06-06 01:35 PM

硬要用的話可以像這樣
perl -e 'print join("\n","0x00 0x00 0x08 0x00 0x02 0x00 0x04 0x00 0x02 0xFF 0x00 0xFF 0x02 0x07 0x88 0x02 0x09" =~ /(0x\S+\s+0x\S+\s+0x\S+\s+|.+$)/g)';

goddesschi 2012-06-06 02:14 PM

引用:
作者tbsky
硬要用的話可以像這樣
perl -e 'print join("\n","0x00 0x00 0x08 0x00 0x02 0x00 0x04 0x00 0x02 0xFF 0x00 0xFF 0x02 0x07 0x88 0x02 0x09" =~ /(0x\S+\s+0x\S+\s+0x\S+\s+|.+$)/g)';


請問這個要怎麼用啊,ulteredit可以嗎?還是說用其他工具?
之所以上來請教大家是因為我手邊有幾千的0x字串,要我手動每三個字串按一次enter會要我的命的 :cry:

darkangel 2012-06-06 02:56 PM

ultraedit 試試:

match case 取消
regular expression engine 選 perl

search:
(0x[0-9a-f]{2} 0x[0-9a-f]{2} 0x[0-9a-f]{2} )

replace:
\1\n

sazabijiang 2012-06-06 05:59 PM

引用:
作者goddesschi
0x00 0x00 0x08 0x00 0x02 0x00 0x04 0x00 0x02 0xFF 0x00 0xFF 0x02 0x07 0x88 0x02 0x09

希望每隔3個0x字串就換行,也就是以下這樣
請問正則表示可以做得到嗎?或者是有沒有其他方法能夠達到這個目的

0x00 0x00 0x08
0x00 0x02 0x00
0x04 0x00 0x02
0xFF 0x00 0xFF
0x02 0x07 0x88
0x02 0x09


若我來做的話,
在命令列模式下寫WSH (windows script host)
或者用ExcelVBA
逐個位元讀取檔案, 每隔固定長度就添加 0d0a換行字元
輸出到另一個檔案, 結束.

erai 2012-06-06 06:13 PM

樓主應該是要編輯檔案,要做重覆性的動作


1. 安裝PSPad(免費軟體)

2. 錄製動作巨集

3. 連續執行巨集

goddesschi 2012-06-06 09:03 PM

引用:
作者darkangel
ultraedit 試試:

match case 取消
regular expression engine 選 perl

search:
(0x[0-9a-f]{2} 0x[0-9a-f]{2} 0x[0-9a-f]{2} )

replace:
\1\n


黑天使大哥,謝謝,這個可以:like:

引用:
作者sazabijiang
若我來做的話,
在命令列模式下寫WSH (windows script host)
或者用ExcelVBA
逐個位元讀取檔案, 每隔固定長度就添加 0d0a換行字元
輸出到另一個檔案, 結束.


引用:
作者erai
樓主應該是要編輯檔案,要做重覆性的動作


1. 安裝PSPad(免費軟體)

2. 錄製動作巨集

3. 連續執行巨集


兩位大哥,謝謝你們分享經驗,我明天搞定客戶後會來研究一下
我目前抓不到頭緒 :laugh:

Tetralet 2012-06-06 09:30 PM

echo '0x00 0x00 0x08 0x00 0x02 0x00 0x04 0x00 0x02 0xFF 0x00 0xFF 0x02 0x07 0x88 0x02 0x09' | sed -e 's/0x\(..\) 0x\(..\) 0x\(..\) /0x\1 0x\2 0x\3 \n/g'

Linux 是你的好朋友... (茶)

oversky 2012-06-06 09:34 PM

用 vim 的話,在 normal mode
:set fo+=a
:set tw=14
{v}gq

goddesschi 2012-08-24 04:11 PM

再請教另兩個問題

問題一:


若是如圖先用ultraedit先行框選一個直行的範圍後
是否能利用regular express
把該框選範圍的所有第一個3取代為0x3

for example
;Lens correction
0x02,33e0 f3
0x02,33e6 f5
0x02,33e7 f4
0x02,33e8 f0
0x02,33e9 f6
0x02,33ea f2
0x02,33eb f7
0x02,33ec f2
0x02,33ed f4
0x02,33ee f0
0x02,33ef f6
0x02,33e0 f6
0x02,33e1 f7
0x02,33e2 f2
0x02,33e3 f4
0x02,33e4 f0
0x02,33e5 f6
0x02,33e6 f8
0x02,33e7 f7
0x02,33e8 f2

------->

;Lens correction
0x02,0x33e0 f3
0x02,0x33e6 f5
0x02,0x33e7 f4
0x02,0x33e8 f0
0x02,0x33e9 f6
0x02,0x33ea f2
0x02,0x33eb f7
0x02,0x33ec f2
0x02,0x33ed f4
0x02,0x33ee f0
0x02,0x33ef f6
0x02,0x33e0 f6
0x02,0x33e1 f7
0x02,0x33e2 f2
0x02,0x33e3 f4
0x02,0x33e4 f0
0x02,0x33e5 f6
0x02,0x33e6 f8
0x02,0x33e7 f7
0x02,0x33e8 f2

問題二:
可否將每列的尾端最後一個半形數字文字或英文之後插入逗號
(若是尾端是空格會是tab或是全形字串等等則忽略,再往前比對)
(1122334455(空格)(空格)(tab)(tab)---->1122334455,(空格)(空格)(tab)(tab))

for example
0x02,0x33e4 f0
0x02,0x33e5 f6
0x02,0x33e6 f8
0x02,0x33e7 f7

----------->
0x02,0x33e4 f0,
0x02,0x33e5 f6,
0x02,0x33e6 f8,
0x02,0x33e7 f7,
0x02,0x33e8 f2,


所有的時間均為GMT +8。 現在的時間是01:46 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。