단어 목록이 있는데 한 문자는 소문자로, 한 문자는 대문자로 설정하고 싶습니다. 예를 들어 "정보"라는 단어를 "정보"와 "정보"로 하고 싶습니다.
답변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;
'
- 입력 라인을 모두 소문자로 변환합니다.
- 대문자와 소문자를 번갈아 사용하여 알파벳이 아닌 문자를 아래로 이동한 다음 위로 이동합니다. 또한 아무것도 아닐 수도 있습니다. 이는 알파가 연속적이라는 의미입니다.
- 마지막으로
y
akatr
명령을 사용하여 대소문자를 바꿔 두 버전을 모두 가져옵니다.
용법
s="메시지"; echo "$s" | 펄 -pe '....'
결과:
iNfOrMaTiOn
InFoRmAtIoN