我有一个字符串:
AddData
TestSomething
TellMeWhoYouAre
等等。我想在大写字母之前添加空格。我该怎么做?
答案1
使用sed
, 并假设您不想在单词前面有空格:
$ sed 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
Add Data
Test Something
Tell Me Who You Are
替换将查找紧随另一个非空白字符的大写字母,并在两者之间插入一个空格。
对于具有多个连续大写字符的字符串(例如WeAreATeam
),这会生成We Are ATeam
。要对此进行排序,请再次运行替换:
$ sed -e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' \
-e 's/\([^[:blank:]]\)\([[:upper:]]\)/\1 \2/g' file.in
答案2
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
这个版本还分隔了连续的大写字母。
答案3
sed -r -e "s/([^A-Z])([A-Z])/\1 \2/g"
在非大写字母和大写字母之间添加空格
答案4
Python解决方案:
#!/usr/bin/env python
from __future__ import print_function
import sys
with open(sys.argv[1]) as f:
for line in f:
for char in line:
if char.isupper():
print(" "+char,end="")
else:
print(char,end="")
测试运行:
$ ./add_space_to_upper.py input.txt
Add Data
Test Something
Tell Me Who You Are