2012-05-23 35 views
0

我有以下命令:錯誤TR指令寬度:PUNCT:PARAM

cat original.txt | tr [:upper:] [:lower:] | tr -d [:digit:] | 
tr -d [:punct:] > preproces.txt 

,系統返回我下面的錯誤。

when translating, the only character classes that may appear in replaceString are 'upper' and 'lower'

的問題,並提供:

tr -d [:punct:] 

有什麼辦法解決這個問題?

我已經搜索了谷歌和StackOverflow,並沒有找到這個問題的答案。

微小編輯(但顯著爲切& pasters):改變 '--D' 到 '-D' 之前[:PUNCT:] 的 '--D' 正在呈現爲「\ 342 \ 200 \ 223d' 並且呈現的差異幾乎不可見。

回答

1

試試下面的命令:

tr '[:upper:]' '[:lower:]' < original.txt | 
    tr -d '[:digit:]' | 
    tr –d '[:punct:]' > preproces.txt 

這避免了臭名昭著的無用的使用貓的:

http://iki.fi/era/unix/award.html

+0

現在,除了已經提到的錯誤之外,還有另一個錯誤: tr:額外操作數<< original.txt >> – Lobo

+0

tr'純粹是一個過濾器,它不接受文件參數:'tr'[[ :upper:]]''[[:lower:]]'

+0

是的,沒有測試過,編輯過。 –

2

你只能得到你,當你試圖看到你說的消息例如:

tr '[:alpha:]' '[:digit:]' 

我能夠使用

tr -d '[:punct:]' 

刪除沒有問題的標點符號。例如:

$ echo "tr '[:alpha:]' [:digit:] <chkit.sh" | tr -d '[:punct:]' 
tr alpha digit chkitsh 
$ 

這是RHEL 5上用於x86/64(tr版本 'TR(GNU的coreutils)5.97')。

你可能會注意到我用引號括起了參數tr(單個或雙重都可以,儘管單個通常更安全)。如果您的目錄中存在任何單字母文件名,則可能會遇到shell將方括號解釋爲字符類的問題,並將這些名稱傳遞給tr。假設你有一個文件p

tr [:upper:] [:lower:] 

該命令是現在tr p [:lower:]。您遇到的錯誤稍有不同,但可能是您的問題與此相關。對shell元字符要非常小心;報價是你的朋友。

注意一倍方括號不是解決方案的一部分:

$ echo "tr -d '[[:alpha:]]' <chkit.sh" | tr -d '[[:alpha:]]'   
- '::' <. 
$ 
+0

對不起,我不會不滿意你的答案。有什麼解決方案?我的TR版本是7.0。 – Lobo

+0

我沒有編譯GNU'tr' 7.0,我不打算改變它。我找到了8.12和5.97的副本,它們的工作方式也是一樣的。 'tr'中的錯誤是不太可能的。所以,就這樣說,我在說,並且證明'tr -d'[:punct:]''工作正常。自己嘗試。第三個代碼塊將一些文本回顯到'tr -d'[:punct:]''並顯示它的工作原理。你應該爲自己嘗試一下。我對你的問題有兩種可能的猜測。一個是「你省略了引號」。另一個原因是你的問題最初將'tr:'格式化爲'[:punct:]'格式。 (續) –

+0

(續):也就是說,當我格式化問題時,最後一個'tr'命令的一部分在一行上,一部分在下一行。我認爲這可能是無關緊要的;這就是爲什麼我直到現在才提及。而且,我認爲,你所擁有的東西不會產生你報告的錯誤。所以:我認爲你還沒有準確地描述你的問題的所有情況。將它分成小塊,就像我所展示的「回聲」線條一樣,然後找出發生了什麼問題。並且請把參數括在'tr'中用單引號括起來。 –

0

如果您tr不支持[:digit:][:punct:]字符類,你必須明確指定。

tr '[:upper:]' '[:lower:]' < original.txt | 
    tr -d '0-9!"#$%&'"'"'()*+,./:;<=>[email protected][\\]^_`{|}~-' > preproces.txt 

(到一個可能由tr -d '[:digit:][:punct:]'在原來的命令來完成,也合併兩個tr -d命令的重構。)

http://www.regular-expressions.info/posixbrackets.html獲得[:punct:]的定義 - 我沒有嘗試了任何驗證,儘管我稍微重構了它以使其與tr以及它在此處出現的shell上下文兼容。