如何剪切(1)驼峰式单词?
Posted
技术标签:
【中文标题】如何剪切(1)驼峰式单词?【英文标题】:How can I cut(1) camelcase words? 【发布时间】:2010-10-11 12:35:51 【问题描述】:在 Bash 中是否有一种简单的方法可以将驼峰词拆分为其组成词?
例如,我想将 aCertainCamelCasedWord 拆分为“某个 Camel Cased Word”,并能够选择我感兴趣的那些字段。当单词分隔符是下划线时,使用 cut(1) 可以轻松完成,但是当单词是驼峰式时,我该怎么做呢?
【问题讨论】:
【参考方案1】:sed 's/\([A-Z]\)/ \1/g'
捕获每个大写字母并将前导空格替换为整个流的捕获。
$ echo "aCertainCamelCasedWord" | sed 's/\([A-Z]\)/ \1/g'
a Certain Camel Cased Word
【讨论】:
如何输出每行的单词而不是空格分隔?【参考方案2】:如果您不需要拆分全部大写的单词,则此解决方案有效。例如,使用您将得到的最佳答案:
$ echo 'FAQPage' | sed 's/\([A-Z]\)/ \1/g'
F A Q Page
但是用我的解决方案,你会得到:
$ echo 'FAQPage' | sed 's/\([A-Z][^A-Z]\)/ \1/g'
FAQ Page
注意:当有多个大写单词的第二个实例时,这将无法正常工作,例如:
$ echo 'FAQPageOneReplacedByFAQPageTwo' | sed 's|\([A-Z][^A-Z]\)| \1|g'
FAQ Page One Replaced ByFAQ Page Two
【讨论】:
【参考方案3】:当有多个大写的第二个实例时,This answer 无法正常工作
echo 'FAQPageOneReplacedByFAQPageTwo' | sed 's|\([A-Z][^A-Z]\)| \1|g'
FAQ Page One Replaced ByFAQ Page Two
所以需要额外的表达方式
echo 'FAQPageOneReplacedByFAQPageTwo' | sed -e 's|\([A-Z][^A-Z]\)| \1|g' -e 's|\([a-z]\)\([A-Z]\)|\1 \2|g'
FAQ Page One Replaced By FAQ Page Two
【讨论】:
【参考方案4】:纯猛击:
name="aCertainCamelCasedWord"
declare -a word # the word array
counter1=0 # count characters
counter2=0 # count words
while [ $counter1 -lt $#name ] ; do
nextchar=$name:$counter1:1
if [[ $nextchar =~ [[:upper:]] ]] ; then
((counter2++))
word[$counter2]=$nextchar
else
word[$counter2]=$word[$counter2]$nextchar
fi
((counter1++))
done
echo -e "'$word[@]'"
【讨论】:
有趣,但更冗长。为我所说的工作使用正确的工具! ;)以上是关于如何剪切(1)驼峰式单词?的主要内容,如果未能解决你的问题,请参考以下文章