'grep' 명령에서 슬래시가 감지되지 않습니다.

'grep' 명령에서 슬래시가 감지되지 않습니다.

텍스트 파일에 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);

일치하는 각 줄을 //다음으로 바꾸십시오.DIVPARTITION BY

$ sed '/PARTITION BY/s%//%DIV%' filename

관련 정보