複数のcsvファイルで特定の文字列を検索および置換する

複数のcsvファイルで特定の文字列を検索および置換する

次の形式のCSVファイルが複数あります。

"TIMESTAMP",col2,col3,col4
"yyyy-mm-dd HH:mm",20,19,17

私は最終的に次のように-交換したいと思います。/

TIMESTAMP,col2,col3,col4
yyyy/mm/dd HH:mm,20,19,17

次のコマンドを使用してファイルを添付しましたが、何も起こりません。

find -name '*.csv' -exec awk '{gsub(/-/, "/",$1)}' '{}' \;

私は何を見逃していますか?助けてください

ベストアンサー1

find . -name '*.csv' -type f -size +10c -exec perl -pi -e '
  s{^(\d\d\d\d)-(\d\d)-(\d\d)\b}{$1/$2/$3}' {} +

-行の先頭のタイムスタンプのsだけが置き換えられ、他のすべての-イベントは無視されます。

.csvそのタイムスタンプを含まないファイルも含め、すべてのファイルを置き換えます。これを防ぐには、GNUを使用してgrep次のことを実行できます。

grep -rlPZ --include='*.csv' '^\d\d\d\d-\d\d-\d\d\b' . |
  xargs -r0 perl -pi -e '
  s{^(\d\d\d\d)-(\d\d)-(\d\d)\b}{$1/$2/$3}' {} +

おすすめ記事