2009-03-05 13 views
8

¿Hay una forma fácil en Bash de dividir una palabra en camello en sus palabras constitutivas?¿Cómo puedo cortar (1) palabras en camello?

Por ejemplo, quiero dividir unCelCleilCasedWord en 'una cierta palabra encamada de Camel' y ser capaz de seleccionar los campos que me interesan. Esto se hace trivialmente con cut (1) cuando el separador de palabras es el guión bajo, pero ¿cómo puedo hacer esto cuando la palabra está codificada?

Respuesta

27

sed 's/\([A-Z]\)/ \1/g'

Captura cada letra mayúscula y sustituye un espacio inicial con la captura de toda la corriente.

$ echo "aCertainCamelCasedWord" | sed 's/\([A-Z]\)/ \1/g' 
a Certain Camel Cased Word 
+0

Me encanta expresiones regulares. – cwallenpoole

0

Bash puro:

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[@]}'" 
+0

Interesante, pero mucho más detallado. ¡Usa la herramienta correcta para el trabajo que digo! ;) –

2

que necesitaba para no dividir todo en mayúsculas:

echo 'FAQPage' |sed 's/\([A-Z][^A-Z]\)/ \1/g' 
FAQ Page 
0

This answer no funciona correctamente cuando hay una segunda instancia de mayúsculas múltiples

echo 'FAQPageOneReplacedByFAQPageTwo' | sed 's|\([A-Z][^A-Z]\)| \1|g' 
FAQ Page One Replaced ByFAQ Page Two 
Se requiere

expresión tal y adicional para que

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