용법

용법

단어 목록이 있는데 한 문자는 소문자로, 한 문자는 대문자로 설정하고 싶습니다. 예를 들어 "정보"라는 단어를 "정보"와 "정보"로 하고 싶습니다.

답변1

암소 비슷한 일종의 영양sed방법:

-- 소문자로 시작:

s="information"
sed 's/\(.\)\(.\)/\L\1\U\2/g' <<< $s
iNfOrMaTiOn

-- 대문자로 시작:

s="information"
sed -E 's/(.)(.){,1}/\U\1\L\2/g' <<< $s
InFoRmAtIoN

  • \L- 대체 항목을 또는 중 하나가 될 때까지 소문자로 변환합니다 \U.\E

  • \U\L- or 가 발견될 때까지 대체 문자를 대문자로 변환합니다.\E


멍하니(GNU awk) 방법:

awk -v FPAT="[a-z]" '{ s=""; for(i=1;i<=NF;i++) { s=s""((i%2)? toupper($i) : $i)} print s }' <<< $s
InFoRmAtIoN
  • FPAT="[a-z]"- 필드 값을 나타내는 패턴

다른함수의 변형을 사용하십시오 split().

awk  '{ n=split($0,a,""); s=""; 
      for(i=1;i<=n;i++) { s=s""((i%2)? toupper(a[i]): tolower(a[i])) } print s }' <<< $s
InFoRmAtIoN
  • split()생성된 요소의 수를 반환합니다.

답변2

POSIX적으로

awk '
  {
    for(i = 1; i <= length; i++) {
      c = substr($0, i, 1)
      printf "%s", (i%2 ? toupper(c) : tolower(c))
    }
    print ""
  }' < words.txt

답변3

perl -pe '
   ($_ = lc) =~ s/([a-z])([^a-z]*)(.)/\L$1$2\U$3/g;
   $_ .= y/a-zA-Z/A-Za-z/r;
'
  1. 입력 라인을 모두 소문자로 변환합니다.
  2. 대문자와 소문자를 번갈아 사용하여 알파벳이 아닌 문자를 아래로 이동한 다음 위로 이동합니다. 또한 아무것도 아닐 수도 있습니다. 이는 알파가 연속적이라는 의미입니다.
  3. 마지막으로 yaka tr명령을 사용하여 대소문자를 바꿔 두 버전을 모두 가져옵니다.

용법

s="메시지"; echo "$s" | 펄 -pe '....'

결과:

iNfOrMaTiOn
InFoRmAtIoN

관련 정보