在大写字母前添加空格

Her*_*rth 10 linux command-line text-formatting

我有一个字符串:

AddData
TestSomething
TellMeWhoYouAre
Run Code Online (Sandbox Code Playgroud)

等等。我想在大写字母前添加空格。我该怎么做?

Kus*_*nda 18

使用sed, 并假设您不希望单词前有空格:

$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are
Run Code Online (Sandbox Code Playgroud)

替换将查找紧跟在另一个非空白字符之后的大写字母,并在两者之间插入一个空格。

对于具有多个连续大写字符的字符串,例如WeAreATeam,这将生成We Are ATeam。要对此进行排序,请再次运行替换:

$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
      -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Run Code Online (Sandbox Code Playgroud)


JJo*_*oao 12

Perl,使用lookbehind 和lookahead 零宽度正则表达式:

$ perl -pe 's/(?<=\w)(?=[A-Z])/ /g'  file.in 

Tell Me Who You Are                    ## TellMeWhoYouAre
I Am A Regular Expression User         ## IAmARegulaExpressionUser
Run Code Online (Sandbox Code Playgroud)

此版本还分隔连续的大写字母。

  • @Kusalananda,谢谢你指出这一点。(恐怕我没有看到问题中写的内容)。在实际情况(编​​程理解、id 单词扩展和 CamelCase 变体)中,通常使用基本标准(分割为单个大写字母或相反)并拥有异常字典。 (2认同)
  • 抱歉,这是OP在我的回答的评论中写的。我同意,如果没有某种单词列表,很难做到这一点。 (2认同)