sedを使用して、1行に複数の文字列にプレフィックスとサフィックスを追加します。

sedを使用して、1行に複数の文字列にプレフィックスとサフィックスを追加します。

次のように、1行に約15,000,000個のINSERTコマンドを含む.sqlファイルがあります。

INSERT INTO tableName (col1,col2,col3,col4,col5,col6,col7,col8) VALUES ('Jan 7 2018 12:33PM', 'R', 'essential-app', '15952008002', 'Jan 7 2018 12:30PM', '0', 'E', NULL);

STR_TO_DATE('Jan 7 2018 12:33PM',%b %d %Y %h:%i%p)2つの日付/時刻値をラップして元の値をそのまま維持したいと思います。

以前はsedを使用してファイルを少し変更したことがありましたが、これほど複雑なことはありませんでした。これらの日付/時刻値を同時に検索するにはどうすればよいですか。一致する文字列の先頭と末尾に文字列を追加するにはどうすればよいですか。

最初に追加:STR_TO_DATE(
最後に追加:,%b %d %Y %h:%i%p)

できる1つのsedコマンドで実行できますか?または、各日付/時刻値に対して1つのsedコマンドを使用する必要がありますか?

ベストアンサー1

努力する:

sed -r -e 's/'\''[A-Z][a-z][a-z]\s+[0-9]+\s[0-9]{4}\s+[0-9]+:[0-9][0-9][AP]M'\''/STR_TO_DATE(&, '\''%b  %d %Y %h:%i%p'\'')/g'

メモ:

  • '\''一重引用符で囲まれた文字列に一重引用符を挿入する方法。

  • 正規表現の一致:

    • 一重引用符'、その後ろ
    • 1つの大文字と2つの小文字Jan(またはFeb何でも)、
    • 1つ以上のスペース、1つ以上の数字、スペース、4桁の数字7 2018
    • 1つ以上のスペース、1つ以上の数字、コロン、2桁の数字、AまたはP、M、12:30PMおよび最後
    • もう一つの一重引用符'

この変更

INSERT INTO tableName (col1,col2,col3,col4,col5,col6,col7,col8) VALUES ('Jan  7 2018 12:33PM', 'R', 'essential-app', '15952008002', 'Jan  7 2018 12:30PM', '0', 'E', NULL);

入力する

INSERT INTO tableName (col1,col2,col3,col4,col5,col6,col7,col8) VALUES (STR_TO_DATE('Jan  7 2018 12:33PM', '%b  %d %Y %h:%i%p'), 'R', 'essential-app', '15952008002', STR_TO_DATE('Jan  7 2018 12:30PM', '%b  %d %Y %h:%i%p'), '0', 'E', NULL);

私はフォーマット文字列を一重引用符で囲みました。それが私たちの意図であることを願っています。

おすすめ記事