Git と sed で一括置換

More than 3 years have passed since last update.


やりたいこと


  • Sassファイル中のCompass用の mixinを、普通のプロパティ表記に置き換えたい。


  • +border-radius(6px)border-radius: 6px、または、+border-radius($size)border-radius: $size みたいな置換がしたい

  • つまり、Gitにインデックスされた全Sassファイルから、+border-radius(なんちゃら)border-radius: なんちゃら に置換したい


コマンド

$ git ls-files *.sass|LC_ALL=C xargs sed -E -i '' 's/\+border-radius\((.+)\)/border-radius: \1/g'


しくみ



  • git ls-files *.sass でGitにインデックスされたファイルの中から、なんちゃら.sass の一覧を出す。


  • LC_ALL=C は Mac のsed で sed: RE error: illegal byte sequence が出てつらいのを回避。


  • xargs で | の前のコマンドの結果を1行ずつ評価する。


  • sed -E とすると、拡張正規表現を使って置換できる。


  • -i はファイルを直接置換する。


  • 's/\+border-radius\((.+)\)/border-radius: \1/g'



    • \((.+)\) は ()内に何文字でも自由な文字列が入り、 \1は1つめの()を参照する

    • 後方参照という



正規表現、使えると便利ですね(ΦωΦ) 使いこなしたい…