【问题标题】:What does tr -d [=,=] do?tr -d [=,=] 有什么作用?
【发布时间】:2017-02-17 17:22:40
【问题描述】:

我有一个代码示例,似乎在某些文本处理的末尾附加了一段额外的格式:

tr -d [=,=]

我不知道这是做什么的,tr 的手册页没有什么帮助。对此有何见解?

【问题讨论】:

  • 顺便说一句,表达式应该被引用以确保安全——如'[=,=]'——否则shell可以用文件名替换它作为全局结果(如果你有一个名为,的文件,例如)在调用tr之前。

标签: bash shell sh tr


【解决方案1】:

来自man tr 页面,

[=equiv=]

等价类

语法[=C=] 扩展为与C 等效的所有字符,没有特定顺序。等价类是一项相对较新的发明,旨在支持非英语字母表。但似乎没有标准的方法来定义它们或确定它们的内容。因此,它们在GNU tr 中并未完全实现;每个字符的等价类仅由该字符组成,没有特殊用途。

来自POSIX tr 页面的示例

此示例使用等价类来识别 file1 中基本字符 'e' 的重音变体,这些变体被剥离 diacritical marks (WikiLink) 并写入 file2。

tr "[=e=]" "[e*]" <file1 >file2

即如果在 file1 中,如果 e 表示为重音符号(éè),则将它们视为普通 e

【讨论】:

  • 更有趣的是,我想知道在这种情况下哪些字符被认为等同于逗号:)
  • @chepner:是的,四处搜索以查看可能的语法用法,但找不到太多关于它的信息。或者更普遍地说,关于等价类的信息非常稀缺。你知道一些吗?很乐意在这里更新。
  • 它可能只是一个等价类。为了好玩,我尝试了echo "?;" | tr -d '[=?=]',但第二个字符 U+037E GREEK QUESTION MARK 没有被删除。可能我需要一个定义此类等价类的语言环境,而我根本没有使用这样的语言环境。
  • @chepner:确切地说,LC_COLLATE,来自POSIX 页面,Represents all characters or collating elements belonging to the same equivalence class as equiv, as defined by the current setting of the LC_COLLATE locale category.
【解决方案2】:

它只会删除== 之间的逗号。检查下面的输出。

%_Host@User> echo "1==,==2==,==3=,=4=,=5" | tr -d [=,=]
1====2====3==4==5
%_Host@User>

谢谢。

【讨论】:

  • 这不解释echo "1,2,3,4,5" | tr -d [=,=]
  • tr 独立于其上下文评估每个字符。周围的内容对行为没有任何影响。
猜你喜欢
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
相关资源
最近更新 更多