【发布时间】:2021-12-15 15:24:27
【问题描述】:
我有一个格式如下的文本文件:
\Hollands\\\\\\hOlAnz/hOlAns\\\\\\\\
\Hollandse\\\\\\hOlAns@\\\\\\\\
\Hollywood\\\\\\hOliwud/hOliwut/hOliwYd\\\\\\\\
...
我想让它看起来像这样⬇️:
\Hollands\\\\\\h O l A n z / h O l A n s\\\\\\\\
\Hollandse\\\\\\h O l A n s @\\\\\\\\
\Hollywood\\\\\\h O l i w u d / h O l i w u t / h O l i w Y d\\\\\\\\
我该怎么办? 非常感谢。
我尝试使用 sed:
sed 's/\{\\\\\\\{1\}\)/\1 /g'
因为我期望在{1\}(每个字符)之后插入\1 /(一个空格),在6个重复的\s之后。
但收到错误提示
RE error: invalid repetition count(s)
【问题讨论】:
-
请注意,当您不将
-r传递给sed时,它使用BRE 而不是ERE 语法。这会改变反斜杠在{之前的解释方式。但是,除此之外,还不清楚您运行的 sed 命令如何具有您想要的行为。 -
重复操作符是修饰符。当使用
sed的-r参数启用 ERE 语法时,{1}并不意味着“任何一个字符”,它意味着“正好是前面的字符之一”(这使它成为空操作,因为当您没有另外指定,anything 应该完全匹配其中一个)。因此,“任何字符中的一个”可以写成.{1},但这与.完全相同——完全没有理由使用{1}。 (当 ERE 语法 未 启用并且您使用 sed 的默认 BRE 时,{1}改为\{1\}。