はじめに
タイトルで説明しにくいのが辛い(-_-;)
僕も常々 sed で シングルクォートやダブルクォートで囲まれた部分のみ置換したいが、なんとかできないものか?と思っていましたので、紹介したいと思います。
検証環境
| |
やりたいこと
以下のような文字列があるとします。
| |
これを以下のように置換したいと思います。
| |
括弧の中の 、 だけを | に置換したいわけです。
sed の s 内部コマンドだけでは実現は難しい…
ぱっと思いつくのが sed 's/、/|/g' ですね。
| |
これだと 括弧の内側以外も置換されて しまいます。
| |
これだと、カッコ内の1つ目の 、 しか置換できません。
sed の s 内部コマンドとほかの内部コマンドを組み合わせる
: 内部コマンドと t 内部コマンドを組み合わせると、標準出力から受け取った文字列に s 内部コマンドの置換処理が適用できなくなるまで処理を繰り返すことができます。
:内部コマンド → ラベルを作成t内部コマンド →s内部コマンドが成功していたら、:で付与したラベルまで遡る
| |
ひとこと
括弧だけでなく、 ダブルクォートで囲まれた部分のみ一括置換したい 、 シングルクォーテーションで囲まれた部分のみ一括置換したい といったケースはよくあります。
コードの文字列リテラル部分だけを置換したい!といったケースに活躍するのではないでしょうか。