質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

Q&A

解決済

1回答

853閲覧

sedコマンド+正規表現で部分置換したい

takaaa

総合スコア7

grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

sed

sedとは、POSIX環境のために作られたコマンドラインエディタです。sedは編集スクリプトの指示のもとに複数のファイルを編集し、標準出力にその結果を出力します。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

置換

置換とは文字列中の特定の文字に対して、別の文字列に置き換えることを指します。

0グッド

0クリップ

投稿2022/05/27 23:09

編集2022/05/27 23:24

したいこと

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

詰まっておりますのでご教授のほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takaaa

2022/05/28 00:05

わかりづらくて申し訳ございません。 grepで該当する値を取れた(正規表現はちゃんとできている)というだけであり、sedだけで済ませるつもりです。
Zuishin

2022/05/28 00:11

grep では拡張正規表現が使われていますが、sed ではそうではありません。リンク先を確認し、合わせてみてください。 その上で、/1 や /2 が sed で何を意味するか調べてみればできるのではないかと思います。
dodox86

2022/05/28 00:31

datetime型相当の文字列がCSVファイルの行のどの部分にあるか(先頭、末尾、途中)で多少とも変わるかもしれないので、可能ならCSVファイルの一部を質問文中に示した方が良いと思います。
melian

2022/05/28 02:44

予め datetime 型の列番号が判っているのであれば awk でもよいかもしれません。 # 2列目の場合 awk -F, -vOFS=, '{sub(/\.[0-9]+$/, "", $2)}{print}' test.csv
guest

回答1

0

ベストアンサー

grepに、-E「拡張正規表現を使う」というオプションを指定していますが、それと同じく拡張正規表現を使うなら、sedにも「拡張正規表現を使う」というオプションが必要です。
Linuxのようなので、GNUのsedでしょうから-rオプションを付けましょう。
(他のsedの場合は異なるオプションだったり、そもそも拡張正規表現を扱えなかったり)

あと、grepの時に無かった\( \)の意図は何なのでしょうか?
sedのコードを書いた時には拡張正規表現と基本正規表現を混ぜて書いていたと言うことですかね?

投稿2022/05/28 01:48

otn

総合スコア84499

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問