我将 sed 脚本从 Ubuntu debian 复制到 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
答案1
s/"value=.*\+1)/"(Date.new + 1.month).strftime(%B)"/ ^^^
您*
有零次或多次重复运算符,后跟\+
。的含义\+
取决于 sed 的版本。它可能匹配+
or \+
,也可能是一个或多个重复运算符。 GNU sed 将其\+
视为一个或多个重复运算符,除非在它没有意义的上下文中,例如这里,在另一个重复运算符之后。我认为 OSX sed 将其\+
视为一个或多个重复运算符,并在这里抱怨,因为两个连续的重复运算符没有意义。
在 sed 中,要匹配+
,请写入+
.
1嗯,这是有道理的,但是除重复运算符之外的所有序列都{…}
可以折叠为单个序列,因此大多数正则表达式引擎都会特殊对待它们。