データ/時刻形式の変数があり、ユーザーが変数を入力するファイルの次の文字列の最初のパラメータに置き換えたいと思います。
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///
説明したように、変数の内容を徹底的に検証し、小さなバービーテーブル