作者 主題: tr指令的問題  (閱讀 2676 次)

0 會員 與 1 訪客 正在閱讀本文。

cisco3662

  • 鑽研的研究生
  • *****
  • 文章數: 739
    • 檢視個人資料
tr指令的問題
« 於: 2011-02-23 16:45 »
想請問以下tr語法為何無法將"減號"刪除,謝謝
代碼: [選擇]
[root@localhost ]# kid=`cat /control/kid`
[root@localhost ]# echo $kid
3M/00-24
[root@localhost ]# kid=`echo $kid|tr -d '/00-24'`
[root@localhost ]# echo $kid
3M-

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: tr指令的問題
« 回覆 #1 於: 2011-02-23 18:05 »
想請問以下tr語法為何無法將"減號"刪除,謝謝
代碼: [選擇]
[root@localhost ]# kid=`cat /control/kid`
[root@localhost ]# echo $kid
3M/00-24
[root@localhost ]# kid=`echo $kid|tr -d '/00-24'`
[root@localhost ]# echo $kid
3M-

試試這樣 : kid=`echo $kid|tr -d '/00\-24'`

cisco3662

  • 鑽研的研究生
  • *****
  • 文章數: 739
    • 檢視個人資料
回覆: tr指令的問題
« 回覆 #2 於: 2011-02-24 11:33 »
這樣改可以
想請問多個\的目的??
謝謝

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
回覆: tr指令的問題
« 回覆 #3 於: 2011-02-24 11:59 »
多一個 \ 是告訴 tr 將 『-』當做一般字元處理
其實'/00-24' 並不會被視為是一般字串
可以將這個字串看成是正規式
所以『-』會被當做是『至』的意思

cisco3662

  • 鑽研的研究生
  • *****
  • 文章數: 739
    • 檢視個人資料
回覆: tr指令的問題
« 回覆 #4 於: 2011-03-02 10:07 »
代碼: [選擇]
[root@localhost control]# kid=`cat /control/kid`
[root@localhost control]# echo $kid
10M/00-24
[root@localhost control]# echo $kid|tr -d 'M/00\-24'
1

我發現當字串是10M/00-24時
tr後會變成1,與我想的應該變成10有出入

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17463
    • 檢視個人資料
    • http://www.study-area.org
回覆: tr指令的問題
« 回覆 #5 於: 2011-03-02 14:56 »
用 sed 如何?
sed 's:M/00-24::'

cisco3662

  • 鑽研的研究生
  • *****
  • 文章數: 739
    • 檢視個人資料
回覆: tr指令的問題
« 回覆 #6 於: 2011-03-02 15:51 »
我已經改用別的方式了
因為我發現tr是處理字元,故遇到我的case有點麻煩