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_01
RED1.NAME
RED1.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
사용할 수 있습니다 .perl
awk
$ 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