正規表現の置換で、カンマで区切られた語句を""と改行で分ける方法
正規表現による置換についてお教えください。
Unixのコマンドで置換するときに、sed コマンドを使うと思います。
今、プログラムのソースコードの中に含まれている語句を取得するために、色々いじろうと思っています。
私が最もお聞きしたいのは、正規表現の書き方であることを、まずご理解ください。
ソースコードの中に、
string headline="語句1,語句2,・・・,語句n-1,語句n";
というように、
string headline=
で始まっていて、
その後に " "(ダブルクォーテーションの組)で囲まれた部分が1箇所あり、
その部分に、カンマ(,)で区切られた語句がいくつもあるような行があったとき、
その " "の部分を、
"語句1",
"語句2",
・・・
"語句n-1",
"語句n"
のように置換したいのです。
つまり、語句一つ一つをダブルクォーテーションで包んで、1行に語句が1つになるようにしたいのです。
厳密に言えば、stringとheadlineの間などに、タブや空白がいくつあるかわからないという問題なども考える必要があるかもしれません。
とりあえず私が考えたのは、
s/\(string headline="\)\([^,]\)+,\(";\)/\1\2",改行"\3/g
です。
s/置換前の文字列のパターン/置換後の文字列のパターン/g
となっています。
置換前のパターンで
\( \)
で囲まれている部分は、置換後のほうで、\1のように参照できます。
■■でも、私の書いたものって、語句が繰り返し出現することに対応できていないように思われます。■■
実際に、置換に改行を含めるには、正規表現をファイルの中に書いて、sedの-fオプションで読み込ませることになると思います。
string headline=" "
という形をしていないものは、たとえ、" " の中がカンマで区切られていてもそれを分けません。
お礼
迅速なご回答ありがとうございます。 期待通りに動きました。 置換の=~にスペースを入れると駄目だったんですね。 今まで知らずに使っていました。