【发布时间】:2018-05-07 20:30:10
【问题描述】:
假设我有一个包含内容的文件 test.txt:
+-foo.bar:2.4
| bar.foo:1.1:test
\| hello.goobye:3.3.3
\|+- baz.yeah:4
我想使用 tr 命令删除以下字符集的所有实例:
{' ', '+', '-', '|', '\'}
对此进行了一些相当广泛的研究,但没有找到清晰/简洁的答案。 这是有效的命令:
输入:
cat test.txt | tr -d "[:blank:]|\\\+-"
输出:
foo.bar:2.4
bar.foo:1.1:test
hello.goobye:3.3.3
baz.yeah:4
我尝试了该集合的许多组合,发现“-”被视为范围指示符(如... [a-z]),因此必须放在末尾。但我有两个主要问题:
1) 为什么反斜杠必须双转义才能包含在集合中?
2) 为什么要放'|'在设置字符串的末尾导致 tr 程序删除文件中的所有内容,除了尾随的换行符?
【问题讨论】:
-
至于 (2),能否请您显示您使用的具有该效果的确切字符串,并指定您当前语言环境的字符排序顺序(这决定了如何解释其中包含
-的范围)?locale命令发出的LC_COLLATE=行的输出就可以了。 -
顺便说一句,这是解释 Ivy 还是 Maven 输出?由于这些工具中的任何一个都可以将依赖关系解析结果转储为 XML,因此我通常会使用 XML 感知工具(XMLStarlet、xsltproc 等)来解释它们。
标签: bash escaping pipe translate tr