[問題] 請教 sed 下法

看板Linux作者 (say)時間13年前 (2013/03/18 16:46), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串1/1
我目前正在處理 markdown link, 需要將 "[test](test)" 轉成 "[test](test.html)", 目前的寫法是: sed 's/\[\([^][\\]\+\)\](\([^][\\]\+\))/[\1](\2.html)/g' # [ group 1 ]( group 2 ) 但如果連結的對象不是 local 路徑,就不做取代, 所以 "[google](http://google.com/)" 將會保持不變。 請問有沒有什麼好的作法?謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.34.7.189

03/18 17:46, , 1F
sed 's/\(\[[^[]*]\)\(([^(:]*\))/\1\2.html)/g'
03/18 17:46, 1F
謝了,不過我希望是更嚴謹的作法,因為冒號其實也可以作為檔名。 可以的話最好是能正確判斷 http, ftp, mailto, ... 等等。 ※ 編輯: tkcn 來自: 114.34.7.189 (03/18 17:58)

03/18 18:30, , 2F
寫個script吧
03/18 18:30, 2F

03/18 19:25, , 3F
那 script 裡頭怎麼做呢? 只用 shell script 我還是沒辦法
03/18 19:25, 3F
後來發現有這種寫法 /pattern/!s/... , 不過,也只能應用在各行獨立的情況下,如果同一行同時有兩種連結,就無能為力了。 ※ 編輯: tkcn 來自: 114.34.7.189 (03/18 19:39) 想了很久,實在是找不到方法了, 最後的 workaround 是無論如何先加上 .html, 之後再判斷一次,如果是 http://..../.html 再把 .html 拿掉。 ※ 編輯: tkcn 來自: 114.34.7.189 (03/18 22:36)
文章代碼(AID): #1HHjHJDp (Linux)
文章代碼(AID): #1HHjHJDp (Linux)