web-dev-qa-db-ja.com

REエラーの取得:osx sedでは繰り返し演算子のオペランドが無効です

UbuntuのDebianからsedスクリプトをosxにコピーしていますが、

REエラー:反復演算子のオペランドが無効です

なにが問題ですか?

$ . sed_shorter_version_user_extensions_to_Ruby.sh
sed: 22: "
### DELETE whole lines ...": RE error: repetition-operator operand invalid
Inspecting 1 file...
...

スクリプトは次のとおりです(22が22行目を意味する場合は、行番号を残しました)。

  1 sed '
  2 ### DELETE whole lines
  3 /\/\//d
  4 /^$/d
  5 ### CHANGE large chunks
  6 s/^storedVars\["/  def /
  7 s/SAD/sad/
  8 s/HAPPY/happy/
  9 s/"\][[:space:]]*=[[:space:]]*/\
 10     /
 11 s/;/\
 12   end\
 13 /
 14 ### CHANGE small chunks
 15 s/"css=/"/
 16 s/"link=/"/
 17 s/"label=/"/
 18 ### CHANGE specific lines
 19 ### Scoped corrections for clarity
 20 /def insurance_expiration/ {
 21   /expiration_month/ {
 22     s/"value=.*\+1)/"(Date.new + 1.month).strftime(%B)"/
 23   }
 24   /expiration_year/ {
 25     s/"value=.*FullYear())/"(Date.new + 1.month).strftime(%Y)"/
 26   }
 27 }
 28 ### Unable to combine these for the %B and %Y despite several tries mdd 9/13/2015
 29 /Date.*new.*month/ {
 30   s/"//g
 31   s/%B/"%B"/
 32   s/%Y/"%Y"/
 33 }
 34 /choose_submodel_text/ {
 35   s/" \] =/\n    /
 36 }
 37 /email.*albert.*random/ {
 38   s/("albert.*gmail\.com")/Faker::Internet.email/
 39 }
 40 ' Variables/user-extensions.js | awk '
 41 ### ADD Header and footer
 42 BEGIN { print "# page object methods"; print "module PageObject # Variable values" }
 43       { print }
 44 END { print "end" } '> rspec_conversions/new_page_object_methods.rb
 45 rubocop -a rspec_conversions/new_page_object_methods.rb
5
Michael Durrant
s/"value=.*\+1)/"(Date.new + 1.month).strftime(%B)"/
          ^^^

*ゼロ以上の繰り返し演算子の後に\+が続いています。 \+の意味は、sedのバージョンによって異なります。 +または\+と一致するか、1つ以上の繰り返し演算子である可能性があります。 GNU sedは\+を1つ以上の繰り返し演算子として扱います。ただし、ここのように、意味がわからないコンテキストの場合は別の繰り返し演算子に従います。 OSX sedは\+を1つ以上の繰り返し演算子として扱い、2つの連続する繰り返し演算子は意味がないため、ここで文句を言います。

Sedでは、+と一致させるために、+と記述します。

¹ まあ、それは理にかなっていますが、{…}を除くすべての繰り返し演算子のシーケンスは1つに折りたたむことができるため、ほとんどの正規表現エンジンはそれらを特別に扱います。