Sedコマンドを使用して2つのパターン間のすべてを一致させる方法は?

Sedコマンドを使用して2つのパターン間のすべてを一致させる方法は?

以下は、解析中のCSVファイルの行pfデータの例です。

"Monday, July 3, 2023 at 9:12:34 PM GMT+0:00","Answer 1","Answer 2","Answer 3"

", 2023 at 9:12:34 PM GMT+0:00" 部分を削除しようとしているので、次のようになります。

"Monday, July 3","Answer 1","Answer 2","Answer 3"

CSVファイルの各行のタイムスタンプデータは異なる値なので、単にハードコードすることはできません。

このコマンドを実行すると、ファイルに何も起こりません。理由はわかりませんが、

sed -i 's/, 2023[","]/","/g' example.csv

何か単純なものを見落としているような感じがする。

答え1

[","]一致する一つ"または、またはに,一致する文字です"

マッチしたいかもしれません注文する文字ではなく、"nullに置き換えられます。したがって(常に-i最初にテストしないでください)

sed -i 's/, 2023[^"]*//' example.csv

ただし、CSV形式を理解するツールの使用を検討することもできます。たとえば、次のようになります。ミラー

mlr --csv -N --quote-all put '$1 = sub($1,", 2023.*", "")'  example.csv

答え2

使用sed

$ sed -i.bak 's/,[^,]*"/"/' input_file
"Monday, July 3","Answer 1","Answer 2","Answer 3"

関連情報