不區分大小寫搜尋 區分大小寫替換

不區分大小寫搜尋 區分大小寫替換

如何使用 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

輸出:

明尼亞普奧利斯


相同的程式碼,更緊湊:

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

相關內容