'grep'コマンドはスラッシュを検出しません。

'grep'コマンドはスラッシュを検出しません。

テキストファイルにSQLクエリがあり、次の行があります。

PARTITION BY (date_key // 100000000);

今、2つのスラッシュを「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

関連情報