【发布时间】:2015-08-19 17:53:05
【问题描述】:
我正在尝试使用 sed 将 2015-06-03_18-05-30 转换为 20150603180530。
我有这个:
$ var='2015-06-03_18-05-30'
$ echo $var | sed 's/\-\|\_//g'
$ echo $var | sed 's/-|_//g'
这些都不起作用。为什么交替不起作用?
【问题讨论】:
-
一般来说,“我如何使用 Y 做 X”比“做 X 的最佳方法是什么?”是一个更糟糕的问题,因为它假设一个答案。这个答案可能不正确。现在,如果你解释为什么你想做Y(“只使用内置工具”;“只使用我的操作系统附带的工具”),这是明智的,并且让人们建议其他工具符合相同的限制。
-
(另外,在此处的示例中,您不想“替换”这些字符,而是要删除它们;用空字符串替换某些内容是 one 方式删除它,但不是唯一的方法;使用暗示特定方法的词同样排除其他方法)。
-
...或者,如果您真正的问题是“为什么这种正则表达式语法在这种情况下不起作用?”,这是一个合法的问题,但我建议直接问。
-
@CharlesDuffy 我不完全同意你的第一条评论。我总体上同意这个想法,但在 SO 人工作的情况下不同意,我的意思是每次有人问如何做到这一点,人们评论并要求放置代码而不是问 howto (通常是接近动作太宽泛或不清楚)。因此,似乎请求应该是我尝试...在这些约束下...我尝试这个失败...
-
@NeronLeVelu,我没有说不要包含尝试过的示例。在这种情况下,使用
sed显示一个人的尝试是完全合适的,可以建立上下文,并且也足以防止关闭。将可接受的答案集限制为仅满足 OP 关于他们如何自己解决问题的最初期望的答案在这一点上没有进一步的好处。当然,尽管如此,我同意应该包括合法的环境限制——但要明确其原因和性质(即“仅使用 POSIX 工具”)。