텍스트 파일에 SQL 쿼리가 있고 다음과 같은 줄이 있습니다.
PARTITION BY (date_key // 100000000);
이제 두 개의 슬래시를 "DIV"라는 단어로 바꾸고 싶습니다.
이를 위해 쉘 스크립트에서 다음을 수행했습니다.
strg=$(grep "PARTITION BY" $entry) ## $entry has the file_name
strg2=$(echo "$strg" | sed 's%\/\/%DIV%g')
하지만 내가 원하는 대로 작동하지 않습니다. 추가 조사 결과 슬래시가 감지되지 않는 것으로 나타났습니다.
echo "$strg"
나도 PARTITION BY (date_key );
시도했다
printf ">%s<\n" "$strg"
그리고
printf "%q\n" "$strg"
그러나 출력은 다음과 같습니다.
>PARTITION BY (date_key );<
그리고
PARTITION\ BY\ \(date_key\ \)\;
각기.
grep "PARTITION BY" <file_name>
하지만 명령줄에서 이 작업을 수행 하면 올바른 출력이 표시됩니다.
PARTITION BY (date_key // 100000000);
누군가 내가 놓친 점을 지적할 수 있습니까?
답변1
grep
다음을 감지합니다 //
.
$ echo 'PARTITION BY (date_key // 100000000);' | grep '//'
PARTITION BY (date_key // 100000000);
sed
다음을 대체합니다.
$ echo 'PARTITION BY (date_key // 100000000);' | sed 's%//%DIV%'
PARTITION BY (date_key DIV 100000000);
일치하는 각 줄을 //
다음으로 바꾸십시오.DIV
PARTITION BY
$ sed '/PARTITION BY/s%//%DIV%' filename