したいこと
dbからcsvファイルを取り出した後に、sedコマンドを使ってdatetime型のyyyy-mm-dd hh:mm:ss.fffをyyyy-mm-dd hh:mm:ssに置換しようとしています。
試したこと
以下の正規表現を使ったgrepで上記の値を取ることは成功しましたが、sedコマンドを使用した置換ができません。
grep -E “[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(\S|\s)([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\.[0-9]{1,}” test.csv
sed -e "s/\([0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])(\S|\s)([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]\)\.[0-9]{1,}/\1/g" test.csv
詰まっておりますのでご教授のほどよろしくお願いいたします。
grep と sed を使うより、一回で済ませる別の方法を使う方が良い気がしますが、それができない理由は何でしょうか?
https://qiita.com/ko1nksm/items/6c0d8e6226a29ea41f07
わかりづらくて申し訳ございません。
grepで該当する値を取れた(正規表現はちゃんとできている)というだけであり、sedだけで済ませるつもりです。
grep では拡張正規表現が使われていますが、sed ではそうではありません。リンク先を確認し、合わせてみてください。
その上で、/1 や /2 が sed で何を意味するか調べてみればできるのではないかと思います。
datetime型相当の文字列がCSVファイルの行のどの部分にあるか(先頭、末尾、途中)で多少とも変わるかもしれないので、可能ならCSVファイルの一部を質問文中に示した方が良いと思います。
予め datetime 型の列番号が判っているのであれば awk でもよいかもしれません。
# 2列目の場合
awk -F, -vOFS=, '{sub(/\.[0-9]+$/, "", $2)}{print}' test.csv
回答1件
あなたの回答
tips
プレビュー