sed 대소 문자를 구분하지 않는 일치가 작동하지 않습니다

sed 대소 문자를 구분하지 않는 일치가 작동하지 않습니다

SQL 파일에서 단어(실제로는 테이블 별칭)를 일치시키고 해당 열 이름을 다른 이름으로 바꾸려고 합니다.

sed -ie s/$alias.${act_cols[a]}/$alias.$third_ele/gI $sql_file

문제는 I대소문자를 구분하지 않는 일치 옵션이 작동하지 않는 것 같습니다. 여기에는 $alias"red1" 값이 포함되어 있고 "NAME"이라고 가정할 수 있는 $act_cols열 배열 이며 대체 열 이름 "COLUMN_01"이 포함되어 있습니다.act_cols[a]$third_ele

파일의 일부 위치에는 별칭 RED1(대문자)이 포함되어 있으며 이러한 경우 열 이름은 바뀌지 않습니다.

예를 들어 다음 red1.NAME으로 올바르게 대체되었지만 대체되지는 않았습니다.red1.COLUMN_01RED1.NAMERED1.COLUMN_01

어떤 도움이라도 대단히 감사하겠습니다. 감사해요.

답변1

나는 GNU sed에만 I/i 수정자가 있다고 생각합니다.

단지, 귀하의 sed가 I/i를 지원하지 않는 경우 아래와 같이 대소문자 구분을 피하기 위해 사용할 수 있습니다.

alias아래와 같이 변수를 할당하고 다음과 같이 사용하십시오 sed.

$ alias="[Rr][Ee][Dd]1"
$ echo "RED1.NAME and red1.NAME and red1 and Red1" | sed -e "s/\($alias\).NAME/\1.COLUMN1/g"
RED1.COLUMN1 and red1.COLUMN1 and red1 and Red1

또는변수가 동적 이면 아래와 같이 또는 를 alias사용할 수 있습니다 .perlawk

$ alias="red1"
$ act_cols="NAME"
$ third_ele="COLUMN1"
$ echo "RED1.NAME and red1.NAME and red1 and Red1" | perl -pe "s/($alias).$act_cols/\1.$third_ele/gi"
RED1.COLUMN1 and red1.COLUMN1 and red1 and Red1

awk를 사용하세요:

$ echo $alias
red1
$ echo "RED1.NAME and red1.NAME and red1 and Red1" | awk -v value=$alias 'BEGIN {IGNORECASE = 1} { gsub(value".NAME",value".COLUMN1");print }'
red1.COLUMN1 and red1.COLUMN1 and red1 and Red1

관련 정보