【发布时间】:2017-03-11 13:43:54
【问题描述】:
我正在使用 sed 替换其他 bash 脚本中的值,例如:
somedata="$(<somefile.sh)"
somedata=`sed 's/ ==/==/g' <<< $somedata` # [space]== becomes ==
somedata=`sed 's/== /==/g' <<< $somedata` # ==[space] becomes ==
||、&&、!= 等也是如此。我认为应该通过正确的正则表达式匹配来减少步骤。运算符不需要周围的空格,但可以在前后、仅在之前或仅在之后有空格。有没有办法用一个 sed 命令来处理所有这些问题?
还有很多其他的条件也没有提到。该脚本的执行时间比预期的要长。
目标是减少整体执行时间,因此我希望减少使用聪明的正则表达式匹配多个条件的命令数量。
我也在考虑 tr、awk 或 perl - 哪个最快?
【问题讨论】:
-
在 bash 中,
&&、||、==和!=周围允许有空格,那么为什么还要麻烦删除它们呢? -
&表示替换右侧的the string that matched the regexp,因此您需要在该上下文中转义&s。 -
@ThisSuitIsBlackNot 缩小脚本。
-
@EdMorton 感谢您指出这一点,我只是将其作为样本输入而没有进行测试。更新了问题。
-
从左侧移除转义符。 &s 是捕获组参考字符,而不是正则表达式元字符。不要只是逃避您认为“特殊”的每个字符(因为软件中的任何内容都不应被视为“特殊”或“新” - 永远不要在描述软件功能时使用这两个词!)因为您可以通过这样做将它们变成元字符.了解每个字符在给定上下文中的含义,因为每个上下文中的含义都不同