대소문자를 구분하지 않고 검색 대소문자를 구분하여 바꾸기

대소문자를 구분하지 않고 검색 대소문자를 구분하여 바꾸기

sed 또는 다른 도구를 사용하여 이와 같이 검색/교체하려면 어떻게 해야 합니까?

 FOO => BAR
 Foo => Bar
 foo => bar

즉, 대소문자에 관계없이 foo를 찾고 동일한 대소문자 패턴으로 바꿉니다.

한 가지 "해결책"은 대소문자를 구분하는 각 패턴에 대해 sed를 한 번 실행하는 것이지만 작업이 더 많아집니다.

답변1

#!/bin/bash

S="NewYorkCity"         # search string
R="minneapolis"         # replace template (in lowercase)
declare -u T            # -u: automatic convert content to upper case
for ((I=0; I<${#S}; I++)); do    # loop over each single letter of $S
  if [[ "${S:$I:1}" =~ [A-Z] ]]; then   # upper case?
    T="${R:$I:1}"       # copy single letter to $T (convert to upper case)
    echo -n "$T"        # print single upper case letter without linefeed
  else
    echo -n "${R:$I:1}" # print single letter unaltered without linefeed
  fi
done

산출:

MinNeap올리스


동일한 코드, 더 컴팩트함:

A="NewYorkCity"        # search
B="minneapolis"        # replace (must be in lowercase)
declare -u X
for ((I=0; I<${#A}; I++)); do if [[ "${A:$I:1}" =~ [A-Z] ]]; then X="${B:$I:1}"; echo -n "$X"; else echo -n "${B:$I:1}"; fi; done

관련 정보