文字列を変数に置き換えるには、sedコマンドを実行するのに役立ちます。

文字列を変数に置き換えるには、sedコマンドを実行するのに役立ちます。

データ/時刻形式の変数があり、ユーザーが変数を入力するファイルの次の文字列の最初のパラメータに置き換えたいと思います。

TO_DATE('07/13/2021 00:30:00' 'MM/DD/YYYY HH24:MI:SS')

'07/13/2021 00:30:00'私の変数に置き換えたいです。

ユーザーが入力した開始時間を受け入れ、それを変数 "st"に格納するスクリプトがあります。

静的クエリを含むSQLファイルがあります。 TO_DATE('07/13/2021 00:30:00'を変数に置き換えるのに役立つ場合は、スクリプトが実行されます。

以下のsedコマンドを試しましたが、動作しません。

sed -e /(.TO_DATE()[^]( .*)/\1'$st'\2/' /apps/tmp/abc.sql

エラーメッセージを受け取る: 's'の未知のオプション私はsedを初めて使用します。 sedを初めて使う

誰でも助けることができますか?

答え1

sedを使用するには対応するコマンドが必要ですs///が、代替テキストにはスラッシュが含まれています。コマンドには別の区切り文字を使用できますs。ここではカンマを使用します。

sed -E "s,(TO_DATE\(')[^']+,\1${timestamp}," file.sql

デモ:

$ cat file.sql
select * from table1
where created > TO_DATE('07/13/2021 00:30:00', 'MM/DD/YYYY HH24:MI:SS');

$ timestamp=$(date '+%m/%d/%Y %T')

$ sed -E "s,(TO_DATE\(')[^']+,\1${timestamp}," file.sql
select * from table1
where created > TO_DATE('07/14/2021 10:46:51', 'MM/DD/YYYY HH24:MI:SS');

ここで重要なのは、sed 本体で二重引用符を使用して、シェルが変数を拡張し、変数に別の区切り文字を選択できるようにすることです。s///

説明したように、変数の内容を徹底的に検証し、小さなバービーテーブル

関連情報