perl ワンライナー
大きなファイルが存在する。この大きなファイルの中の特定の文字列を置き換えたい。
perl ワンライナーの出番。
$ perl -pe 's/xxx/X01/g;s/yyy/X02/g' in_file > out_file
これでxxxはX01に、yyyはX02に置換される。
本当は、こんな単純な条件で置換してしまうと、余計なところまで置換されそうなので、もう少し悩む必要がある。
ちなみに、perlのオプションの-eが直後のコマンドを実行するということ。-pはファイルを読み込んで出力すること。
ここまで簡単な編集なら、awkでもできる。
$ awk '{gsub("xxx", "X01");gsub("yyy", "X02");print}' in_file | tee out_file
gsubが文字列置換。検索対象文字列には正規表現が利用できる。
subという関数もあるが、こちらは最初のマッチのみを置換する。
gsubは3つ目の引数に置換対象の文字列をしていできるが、省略すると$0が入る。
printも引数を省略すると$0が入るので、行ごとに処理し、置換が終わったら出力される。
teeは標準入力をファイルに出力するコマンド。 > out_fileでも良いとは思うが、一応コマンドを使っておく。
同じタグの記事
- macOSをHigh Sierraに更新した。スクリプト実行環境のバージョンは変わったのか
- macOSをMojaveに更新した。スクリプト実行環境のバージョンは変わったか
- perlで日付を扱うならTime::Piece
- perl正規表現で制御コードを除去する
- バッチ処理の基本・ファイル入出力
同じカテゴリの記事
コメントを残す