簡體   English   中英

音譯行為(shell 中的 tr 程序)

[英]Transliteration behavior (tr program in shell)

我了解 tr 的基本行為,但在涉及集合和序列時感到困惑。 一些例子:

$ tr 'a' '[0]'
aaaaaa
[[[[[[
$ tr 'a-z' '[0-9]'
abcdef
[01234
$ tr 'a-z' '[*]'
abcde
[*]]]
$ tr 'a-z' '[\n]'
abcdef
[
]]]]
$ tr 'a-z' '[\n*]'
abcdef






$ tr 'a-z' '\n'
abcdef





在我看來,在某些情況下(比如[\n*] )它正確地解釋了集合,但在其他情況下,它似乎停在右括號處並連續 output 那個。 我原以為集合[]的意思是“任何一個包含的字符”,並且*不會被視為集合中的特殊字符。 這似乎在某些情況下適用,但在其他情況下則不然。 這里發生了什么?

此外,在我看來tr 'az' '\n'執行與tr 'az' '[\n*]相同的操作。 我缺少一些細微差別嗎?

[只有在以[CHAR*][CHAR*REPEAT][:POSIXCLASS:][=CHAR=]形式提供集合時才具有特殊含義。

從您的示例中,只有tr 'az' '[\n*]'被解釋為集合(“在 SET2 中,復制 CHAR 直到 SET1 的長度”); 所有其他示例均按字面解釋。

所以tr 'af' '[*]'等同於寫tr 'abcdef' '[*]'並且會翻譯 a→[, b→*, c→], d→], e→], f→]。

tr 'af' '[\n*]'然而與編寫tr 'abcdef' '\n\n\n\n\n\n'相同的,並且將用換行符替換每個字符。 對於單個字符,這已經是tr的默認值,因此您可以簡單地編寫tr 'af' '\n'就像您在上一個示例中發現的那樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM