[]
一些簡單的工作用 sed 處理是很方便的,但是在編輯 OOTP 的 names.txt 的時候遇到了一些小問題,這個檔案是長這樣子的:
Aaron,1,0
Abberley,1,0
…
如果我要把所有 A 開頭的人名找出來,然後刪掉,那 /^A/d就可滿足我們的需求,而如果要把 0 結尾的人名找出來刪掉的話,理論上用 /0$/d 就收工了。 不過在 freebsd 下試一下發現 sed 不鳥我,後來想了想覺得應該是換行的問題。 Unix 系統的換行是 LF,而 Windows 的換行是 CR+LF,比 Unix 多了一個 CR。 所以說其實從 freebsd 的觀點來看這兩個的行末不只是 0 而已,而是 0 後面再接一個 “CR”。 這樣看來只要稍微改一下,從 /0$/d 換成 /0^M$/d 就解決了。 ( ^M 在 vim 下可以用 ctrl+v 接 ctrl+m 按出來) 試過之後果然這樣就可以用了。
要取代的話用 s// 也是一樣的情況,不過要注意的是如果輸出要維持在原來的 dos 格式,例如把0結尾換成1結尾,那就要 s/0^M$/1^M/ ,要是沒在管的話那就沒差了。
同樣的,在 grep dos 格式的文字檔的時候也要需要注意這個問題,總之就是有要處理/判斷行末的時候就會遇到,之前很少會處理這種 windows 產生的文字檔所以也沒在注意,之後再遇到應該就不會忘記了 :p