[已解決]請教正規表示法 [論壇 - Ubuntu 程式設計]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



[已解決]請教正規表示法
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 32
HP : 0 / 798
MP : 496 / 25943
EXP: 94
離線
底下內容需要使用正規表示法來自動搜尋取代

114361001,7934857
110461002,615404156
110801003,25416
110801004,6546854
110854365,241898
410823434,4398556
134254567,984375
65756478,9867324

以上第一欄為帳號,第二欄填入密碼位置,需要變成這樣,
[114361001](inner)
secret=7934857

正規表示法語法:
搜尋 (\d*),(\d*)
取代 [$1](inner)\nsecret=$2
$1 為第一個找到的字串, $2為第二個找到的字串 \n 為換行字元
以上是使用支援正規表示法的文書編輯程式(如 madedit 就能完美的達成)

但是若使用 sed 這隻程式來處理的話,它對正規表示法的支援似乎不是很好
sed 's/\(\d*\)\,\(\d*\)/\1](inner)\nsecret=\2/' 檔名.txt
$1 為第一個找到的字串, $2為第二個找到的字串
在 sed 裡面 $1 變成 \1 而 $2 要變成 \2 這樣子的寫法
它執行的結果就會變成這樣
114361001](inner)
secret=7934857
少了左邊的那個 [ 中括號
而那個紅字的部份我若要寫成[\1] 或 \[\1\] 執行的結果就會變成這樣
114361001[](inner)
secret=7934857

我目前找不出解法

請教對 sed 較熟的高手是否有解

2013/6/18 18:21
應用擴展 工具箱
回覆: 請教正規表示法
管理員
註冊日期:
2011/3/11 6:32
所屬群組:
討論區管理群
等級: 44
HP : 216 / 1084
MP : 1088 / 26813
EXP: 38
離線
manpage 有沒有提示?

2013/6/18 18:35
本篇發表文章以「創用CC BY 3.0 或更新之台灣地區版本」授權條款釋出,如何使用敬請參考
 Creative Commons — 姓名標示 3.0 台灣 — CC BY 3.0 TW
 http://creativecommons.org/licenses/by/3.0/tw/

「你不懂的東西就不要亂講,被懂得人看破手腳就算了,騙不懂的人誤導別人,還要別人把你當成大師,這就真的是說不過去了。」
 by Allen Own
 出處 http://www.plurk.com/p/i4uogm

自由知識創作平台介紹
 https://docs.google.com/document/d/1MGG6lW_0qCgH4U785R-IwSc_INdoBGej1l-JxiA4gPE
如何建立新的自由知識創作平台文件
 https://docs.google.com/document/d/11NdzOW2lGYksfyQIcPMPye5tlmj1J0QTkgPTmQvIvKA
應用擴展 工具箱
回覆: 請教正規表示法
會員五級
註冊日期:
2008/10/7 21:19
所屬群組:
已註冊使用者
等級: 36
HP : 0 / 896
MP : 661 / 28506
EXP: 85
離線
測試結果:
's/\([0-9]*\),\([0-9]*\)/[\1](inner)\nsecret=\2/g'


看起來sed像是不認識「\d」,改用[0-9]代替

2013/6/18 18:54
I′m UGP
應用擴展 工具箱
回覆: 請教正規表示法
會員五級
註冊日期:
2010/9/26 16:05
所屬群組:
已註冊使用者
等級: 27
HP : 0 / 660
MP : 317 / 17217
EXP: 43
離線
請問一定只能用sed一個指令來處理嗎?
如果允許使用shell script,
那會變的單純許多

2013/6/18 19:34
應用擴展 工具箱
回覆: 請教正規表示法
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 32
HP : 0 / 798
MP : 496 / 25943
EXP: 94
離線
因為 sed 一行就可以解決了,不過我一樣是會把 sed 寫在 bash 裡來執行。
所以如果你有較好的解法也歡迎提出。

謝謝 UGP 提供的方法,的確可行。

2013/6/18 20:01
應用擴展 工具箱
回覆: 請教正規表示法
會員五級
註冊日期:
2010/9/26 16:05
所屬群組:
已註冊使用者
等級: 27
HP : 0 / 660
MP : 317 / 17217
EXP: 43
離線
夢見草 寫到:
因為 sed 一行就可以解決了,不過我一樣是會把 sed 寫在 bash 裡來執行。
所以如果你有較好的解法也歡迎提出。

謝謝 UGP 提供的方法,的確可行。

能解決就恭喜了

如果是我來處理這個問題
應該會是用for迴圈讀入每一行
再用cut把逗號左右兩邊分離出來
再用echo輸出需要的格式
這樣會多寫好幾行
不過比較像寫程式,容易看得懂

2013/6/18 20:54
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.