我在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的正则表达式搜索没有产生任何结果。
答案 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;}' )"