如何在某些特定符号后的字符之间插入 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 和换行符并打印结果。
我有一个格式如下的文本文件:
\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 和换行符并打印结果。