首页 > 解决方案 > 如何在某些特定符号后的字符之间插入空格?

问题描述

我有以下格式的文本文件:

\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 /之后插入(一个空格),在 6 个重复s 之后。但得到错误说{1\}\

RE error: invalid repetition count(s)

标签: bashshellawksed

解决方案


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

使用 GNU awk 作为第三个参数来匹配()和 gensub():

$ awk 'match($0,/(.*\\{6}.)(.*)(\\{8})/,a) { $0=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\\\\\\\\

推荐阅读