2012-10-02 53 views
1

當我嘗試在模式s/find-word/replace-word/Ig的末尾使用I選項對大小寫不敏感的S & R時,出現該命令出現亂碼的錯誤。如果我在沒有I的情況下運行它,完全相同,即s/find-word/replace-word/g。我使用的是Solaris 5.10,是否有可能我們的sed比較舊,不支持I?Solaris 5.10是否支持sed不區分大小寫的匹配?

感謝

+0

重複http://stackoverflow.com/questions/4412945/case-insensitive -search-replace-with-sed – michael

+0

**編輯:**不是重複的,只是實際問題的標題很差,所以我相應地更改了標題。最佳答案似乎正確回答了這個問題,但OP似乎已經放棄了這個問題。 – danorton

回答

9

我建議使用小寫I: S /自/至/ GI


編輯:好的,我和我的smartassery ......據http://www.unix.com/shell-programming-scripting/202109-sed-i-not-available-solaris-5-10-a.html和很多其他的鏈接,似乎solaris系統上的sed工具不支持-i選項......那麼最好的解決方案是使用busybox,爲你的系統重建GNU sed,或者使用perl腳本來完成工作。

+0

沒有工作 – amphibient

+0

@foampile關閉CAPSLOCK? – 2012-10-02 17:58:06

+0

我曾經使用過大寫字母,因爲我發現了一個例子。嘗試小寫,但無濟於事 – amphibient

3

如果你的的sed版本不支持ignorecase標誌,你可能會預小寫所有輸入與tr

<infile tr 'A-Z' 'a-z' | sed ... 
+1

sed,awk和tr是編寫可移植腳本時在solaris上處理的最困難的事情;在這種情況下tr不一定有幫助(格式化在評論中有點困難,但我會嘗試):在我的solaris 5.10上的$ type -ap tr產生:('/ bin/tr/usr/bin/tr/usr/ucb/tr/usr/xpg4/bin/tr/usr/xpg6/bin/tr'),所以要小心:'$ for tr in $(type -ap tr); do echo「$(echo AaBbCc | $ tr'A-Z''a-z')== $ tr ...」;完成'產量: 'aaBbCc ==/bin/tr ... aaBbCc ==/usr/bin/tr ... aabbcc ==/usr/ucb/tr ... AaBbCc ==/usr/xpg4/bin/tr ... AaBbCc ==/usr/xpg6/bin/tr ...' – michael

+1

fyi,只要不使用'/ usr/ucb/tr',它就可以在另一個'tr'上運行:'tr'[:upper:]''[:lower:]''。不幸的是,對於可移植腳本(甚至在不同的solaris盒子中,使用不同的'PATH'),如果實際上需要使用'tr',則腳本需要測試正在使用哪個'tr'。 (這幾乎不值得。) – michael

相關問題