テキストファイルに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);
一致する各行を//
次に置き換えます。DIV
PARTITION BY
$ sed '/PARTITION BY/s%//%DIV%' filename