Sed在红宝石中没有按预期工作

时间:2015-01-09 08:08:01

标签: ruby regex sed

我在bash中使用下面的sed命令

echo "<version>1.0.216</version>" | sed  -e 's@<version>\(.*\)</version>@\1@' 
运行时的

使我低于输出

  -bash-4.1$  echo "<version>1.0.216</version>" | sed  -e 's@<version>\(.*\)</version>@\1@'
  1.0.216

但是当我将相同的命令放在ruby文件中时(下面的内容)

"value=`echo "<version>1.0.216</version>" | sed  -e 's@<version>\(.*\)</version>@\1@'`

放价值&#34;

我得到了这个输出

     -bash-4.1$ ruby test.rb
     <version>1.0.216</version>

任何人都可以帮助我理解可能导致此行为的原因。我认为这可能与ruby处理正则表达式的方式有关,但是我对ruby的正则表达式搜索没有产生任何结果。

1 个答案:

答案 0 :(得分:1)

"value=$( echo "<version>1.0.216</version>" | sed -e 's@<version>\([^<]*\)</version>@\1@' )"
# or, due to shell escaping interpretation (note the double \\)
"value=$( echo "<version>1.0.216</version>" | sed -e 's@<version>\\([^<]*\\)</version>@\\1@' )"

"value=$( echo "<version>1.0.216</version>" | sed -e 's/.*>//;s/<.*//' )"
#for a multi line entry
"value=$( StreamOfYourData | sed -n -e '/<version>/ {s/.*>//;s/<.*//p;q;}' )"