>

예를 들어 특정 단어의 가능한 모든 소문자 및 대문자 치환을 인쇄하기 위해 bash 스크립트를 작성하고 싶습니다. 할리 :

harley
harleY
harlEy
harLey
...
HARLey
HARLEy
HARLEY

순진한 해결책은이 특정 단어에 대해 n 번째 (n은 len (word)) 중첩 for 루프를 작성하는 것입니다.

#!/bin/bash
for a in {h,H}; do
    for b in {a,A}; do
    ...
    done
done

그러나 다른 단어로 스크립트를 다시 코딩해야합니다.

이 작업을 수행하는 더 좋은 방법이 있습니까?

  • 답변 # 1

    약간 좋은 해결책 :

    echo {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y}
    
    

    완전한 확장 성을 위해 :

    echo harley \
    | perl -nle 'print "echo ",
                        join "",map { "{" . lc . "," .uc ."}" } split //' \
    | xargs -I {} bash -c "{}"
    
    

    한 줄에 한 단어 씩만 있어야한다면

    for w in {h,H}{a,A}{r,R}{l,L}{e,E}{y,Y};do echo $w;done
    
    

    mattdm의 의견에 감사합니다

    확장 가능한 해당 버전은 다음과 같습니다.

    echo harley \
    | perl -nle 'print join "",map { "{" . lc . "," .uc ."}" } split //' \
    | xargs -I {} bash -c 'for w in {};do echo $w;done'
    
    

    재미있게, "harley"를 "supercalifragilisticexpialidocious"로 교체해보십시오. 5 분이 지났는데도 컴퓨터가 여전히이 상태에서 작동하지 않으며 아마도 끝나지 않을 것입니다. :)

  • 답변 # 2

    eval echo $(echo "단어"| sed 's /./ {\ U&, \ L&}/g')

    sed 's/./{&,&}/g'   Foo 를 설정합니다   {F,F}{o,o}{o,o} 로 매우 쓸모가 없습니다. 그러나 \U 를 추가하십시오  그리고 \L  그리고 당신은 각 글자의 대문자와 소문자를 얻습니다; 즉, {F,f}{O,o}{O,o} .

    그런 다음 eval 를 사용하는 것은 간단합니다  껍질을 말하다 {X,x} 중괄호 시퀀스를 확장하려면

  • 답변 # 3

    편집 2 :이 답변은 잘못되었습니다. 원하는대로 2 ^ n 조합을 생성하지 않습니다.

    수정 :이유를 모르겠지만이 솔루션은 @Joeseph R의 perl 솔루션에 비해실제빠릅니다. "Supercalifragilisticexpialidocious"이하로 실행됩니다. 0.3 초!

    여기에 내 균열이 있습니다 :

    #!/bin/bash
    str=${1^^}  # convert to uppercase
    len=${#str} # get length of string
    for ((perm=0; perm <= len; perm++)); do
        for ((i=0; i <= len; i++)); do
            lower=${str,,}   # convert to lowercase
            # Uppercase n-th letter for permutation
            if [ $perm -gt 0 ]; then
                nth=${lower:perm-1}
                lower=$(echo ${lower:0:perm-1}${nth^})
            fi
            echo -n ${str:0:i} # print orig string from 0 to $i
            echo ${lower:i}    # print new string from $i to end
        done
    done | sort -u
    
    

    실행 중 :

    $ ./permutations.sh hi
    hi
    hI
    Hi
    HI
    $ ./permutations.sh harley
    harley
    harleY
    harlEy
    harLey
    haRley
    hArley
    Harley
    HarleY
    HarlEy
    HarLey
    HaRley
    HArley
    HArleY
    HArlEy
    HArLey
    HARley
    HARleY
    HARlEy
    HARLey
    HARLeY
    HARLEy
    HARLEY
    
    

    포크하고 자유롭게 수정하십시오. 최적화 할 수 있다고 확신합니다. https://gist.github.com/ryanmjacobs/4c02ad80f833dee0c307

  • 답변 # 4

    코딩 대신 준비된 도구를 사용하려면 TextMechanic (순열/조합 생성기 도구) 및 Unit-Conversion.info

관련 자료

  • 이전 package management - OpenSSH 클라이언트 만 빌드
  • 다음 최신 파일 찾기