如何在某些特定符号后的字符之间插入 space?

How to insert space between characters after some specific symbols?

我有一个格式如下的文本文件:

\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\}\)/ /g'

正如我所期望的那样,在 {1\}(每个一个字符)之后插入 /(一个空白 space),在 6 个重复的 \ 之后。 但收到错误提示

RE error: invalid repetition count(s)

sed 是对单个字符串执行简单 s/old/new/ 操作的正确工具,除此之外还有其他任何操作(例如,隔离字符串的一部分,然后根据需要对该字符串的某些部分执行进一步的操作) , 只需使用 awk.

对第三个参数使用 GNU awk 来 match() 和 gensub():

$ awk 'match([=10=],/(.*\{6}.)(.*)(\{8})/,a) { [=10=]=a[1] gensub(/./," &","g",a[2]) a[3] } 1' file
\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\\\\

这可能对你有用 (GNU sed):

sed -E 's/(\{6}[^\])(.*\{8})/ \n/;:a;s/\n([^\])/ \n/;ta;s/ \n//' file

启用扩展正则表达式 -E

对于所有行,使用模式匹配在六个 \ 之后插入一个 space 和唯一分隔符 (\n)。

迭代用后面的字符a space和换行符替换换行符和后面的字符,直到下一次出现\

删除最后一个 space 和换行符并打印结果。