2012-06-28 82 views
1

我在這一行的時候,我從一個Ruby腳本內運行sed的一個問題工作:sed命令不是紅寶石內工作,但它在終端

sed -ne '/^<div class="results">/,/<\/body>/p' blah.html 

我試圖內運行反引號``但它不能從Ruby腳本中正確執行。是blah.html的內容如下...

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title>RSpec results</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <meta http-equiv="Expires" content="-1" /> 
    <meta http-equiv="Pragma" content="no-cache" /> 
    <style type="text/css"> 
    body { 
    margin: 0; 
    padding: 0; 
    background: #fff; 
    font-size: 80%; 
    } 
    </style> 
    <script type="text/javascript"> 
    // <![CDATA[ 

function addClass(element_id, classname) { 
    document.getElementById(element_id).className += (" " + classname); 
} 

function removeClass(element_id, classname) { 
    var elem = document.getElementById(element_id); 
    var classlist = elem.className.replace(classname,''); 
    elem.className = classlist; 
} 

function moveProgressBar(percentDone) { 
    document.getElementById("rspec-header").style.width = percentDone +"%"; 
} 

function makeRed(element_id) { 
    removeClass(element_id, 'passed'); 
    removeClass(element_id, 'not_implemented'); 
    addClass(element_id,'failed'); 
} 

function makeYellow(element_id) { 
    var elem = document.getElementById(element_id); 
    if (elem.className.indexOf("failed") == -1) { // class doesn't includes failed 
    if (elem.className.indexOf("not_implemented") == -1) { // class doesn't include not_implemented 
     removeClass(element_id, 'passed'); 
     addClass(element_id,'not_implemented'); 
    } 
    } 
} 

function apply_filters() { 
    var passed_filter = document.getElementById('passed_checkbox').checked; 
    var failed_filter = document.getElementById('failed_checkbox').checked; 
    var pending_filter = document.getElementById('pending_checkbox').checked; 

    assign_display_style("example passed", passed_filter); 
    assign_display_style("example failed", failed_filter); 
    assign_display_style("example not_implemented", pending_filter); 

    assign_display_style_for_group("example_group passed", passed_filter); 
    assign_display_style_for_group("example_group not_implemented", pending_filter, pending_filter || passed_filter); 
    assign_display_style_for_group("example_group failed", failed_filter, failed_filter || pending_filter || passed_filter); 
} 

function get_display_style(display_flag) { 
    var style_mode = 'none'; 
    if (display_flag == true) { 
    style_mode = 'block'; 
    } 
    return style_mode; 
} 

function assign_display_style(classname, display_flag) { 
    var style_mode = get_display_style(display_flag); 
    var elems = document.getElementsByClassName(classname) 
    for (var i=0; i<elems.length;i++) { 
    elems[i].style.display = style_mode; 
    } 
} 

function assign_display_style_for_group(classname, display_flag, subgroup_flag) { 
    var display_style_mode = get_display_style(display_flag); 
    var subgroup_style_mode = get_display_style(subgroup_flag); 
    var elems = document.getElementsByClassName(classname) 
    for (var i=0; i<elems.length;i++) { 
    var style_mode = display_style_mode; 
    if ((display_flag != subgroup_flag) && (elems[i].getElementsByTagName('dt')[0].innerHTML.indexOf(", ") != -1)) { 
     elems[i].style.display = subgroup_style_mode; 
    } else { 
     elems[i].style.display = display_style_mode; 
    } 
    } 
} 

    // ]]> 
    </script> 
    <style type="text/css"> 
#rspec-header { 
    background: #65C400; color: #fff; height: 4em; 
} 

.rspec-report h1 { 
    margin: 0px 10px 0px 10px; 
    padding: 10px; 
    font-family: "Lucida Grande", Helvetica, sans-serif; 
    font-size: 1.8em; 
    position: absolute; 
} 

#label { 
    float:left; 
} 

#display-filters { 
    float:left; 
    padding: 28px 0 0 40%; 
    font-family: "Lucida Grande", Helvetica, sans-serif; 
} 

#summary { 
    float:right; 
    padding: 5px 10px; 
    font-family: "Lucida Grande", Helvetica, sans-serif; 
    text-align: right; 
} 

#summary p { 
    margin: 0 0 0 2px; 
} 

#summary #totals { 
    font-size: 1.2em; 
} 

.example_group { 
    margin: 0 10px 5px; 
    background: #fff; 
} 

dl { 
    margin: 0; padding: 0 0 5px; 
    font: normal 11px "Lucida Grande", Helvetica, sans-serif; 
} 

dt { 
    padding: 3px; 
    background: #65C400; 
    color: #fff; 
    font-weight: bold; 
} 

dd { 
    margin: 5px 0 5px 5px; 
    padding: 3px 3px 3px 18px; 
} 

dd .duration { 
    padding-left: 5px; 
    text-align: right; 
    right: 0px; 
    float:right; 
} 

dd.example.passed { 
    border-left: 5px solid #65C400; 
    border-bottom: 1px solid #65C400; 
    background: #DBFFB4; color: #3D7700; 
} 

dd.example.not_implemented { 
    border-left: 5px solid #FAF834; 
    border-bottom: 1px solid #FAF834; 
    background: #FCFB98; color: #131313; 
} 

dd.example.pending_fixed { 
    border-left: 5px solid #0000C2; 
    border-bottom: 1px solid #0000C2; 
    color: #0000C2; background: #D3FBFF; 
} 

dd.example.failed { 
    border-left: 5px solid #C20000; 
    border-bottom: 1px solid #C20000; 
    color: #C20000; background: #FFFBD3; 
} 


dt.not_implemented { 
    color: #000000; background: #FAF834; 
} 

dt.pending_fixed { 
    color: #FFFFFF; background: #C40D0D; 
} 

dt.failed { 
    color: #FFFFFF; background: #C40D0D; 
} 


#rspec-header.not_implemented { 
    color: #000000; background: #FAF834; 
} 

#rspec-header.pending_fixed { 
    color: #FFFFFF; background: #C40D0D; 
} 

#rspec-header.failed { 
    color: #FFFFFF; background: #C40D0D; 
} 


.backtrace { 
    color: #000; 
    font-size: 12px; 
} 

a { 
    color: #BE5C00; 
} 

/* Ruby code, style similar to vibrant ink */ 
.ruby { 
    font-size: 12px; 
    font-family: monospace; 
    color: white; 
    background-color: black; 
    padding: 0.1em 0 0.2em 0; 
} 

.ruby .keyword { color: #FF6600; } 
.ruby .constant { color: #339999; } 
.ruby .attribute { color: white; } 
.ruby .global { color: white; } 
.ruby .module { color: white; } 
.ruby .class { color: white; } 
.ruby .string { color: #66FF00; } 
.ruby .ident { color: white; } 
.ruby .method { color: #FFCC00; } 
.ruby .number { color: white; } 
.ruby .char { color: white; } 
.ruby .comment { color: #9933CC; } 
.ruby .symbol { color: white; } 
.ruby .regex { color: #44B4CC; } 
.ruby .punct { color: white; } 
.ruby .escape { color: white; } 
.ruby .interp { color: white; } 
.ruby .expr { color: white; } 

.ruby .offending { background-color: gray; } 
.ruby .linenum { 
    width: 75px; 
    padding: 0.1em 1em 0.2em 0; 
    color: #000000; 
    background-color: #FFFBD3; 
} 

    </style> 
</head> 
<body> 
<div class="rspec-report"> 

<div id="rspec-header"> 
    <div id="label"> 
    <h1>RSpec Code Examples</h1> 
    </div> 

    <div id="display-filters"> 
    <input id="passed_checkbox" name="passed_checkbox" type="checkbox" checked onchange="apply_filters()" value="1"> <label for="passed_checkbox">Passed</label> 
    <input id="failed_checkbox" name="failed_checkbox" type="checkbox" checked onchange="apply_filters()" value="2"> <label for="failed_checkbox">Failed</label> 
    <input id="pending_checkbox" name="pending_checkbox" type="checkbox" checked onchange="apply_filters()" value="3"> <label for="pending_checkbox">Pending</label> 
    </div> 

    <div id="summary"> 
    <p id="totals">&nbsp;</p> 
    <p id="duration">&nbsp;</p> 
    </div> 
</div> 


<div class="results"> 
<div id="div_group_1" class="example_group passed"> 
    <dl style="margin-left: 0px;"> 
    <dt id="example_group_1" class="passed">Ark - Header (styles)</dt> 
    </dl> 
</div> 
<div id="div_group_2" class="example_group passed"> 
    <dl style="margin-left: 15px;"> 
    <dt id="example_group_2" class="passed">that we have hit a valid URL</dt> 
    <script type="text/javascript">moveProgressBar('14.2');</script> 
    <dd class="example passed"><span class="passed_spec_name">should not return an invalid error message</span><span class='duration'>7.76052s</span></dd> 
    </dl> 
</div> 
<div id="div_group_3" class="example_group passed"> 
    <dl style="margin-left: 15px;"> 
    <dt id="example_group_3" class="passed">Ark Home Button</dt> 
    <script type="text/javascript">moveProgressBar('28.5');</script> 
    <dd class="example passed"><span class="passed_spec_name">should exist</span><span class='duration'>2.22255s</span></dd> 
    </dl> 
</div> 
<div id="div_group_4" class="example_group passed"> 
    <dl style="margin-left: 15px;"> 
    <dt id="example_group_4" class="passed">Ark Sign in link</dt> 
    <script type="text/javascript">moveProgressBar('42.8');</script> 
    <dd class="example passed"><span class="passed_spec_name">should exist</span><span class='duration'>1.68413s</span></dd> 
    </dl> 
</div> 
<div id="div_group_5" class="example_group passed"> 
    <dl style="margin-left: 15px;"> 
    <dt id="example_group_5" class="passed">Ark Home Button Style</dt> 
    <script type="text/javascript">moveProgressBar('57.1');</script> 
    <dd class="example passed"><span class="passed_spec_name">should have accurate styling</span><span class='duration'>2.98297s</span></dd> 
    </dl> 
</div> 
<div id="div_group_6" class="example_group passed"> 
    <dl style="margin-left: 15px;"> 
    <dt id="example_group_6" class="passed">Ark SignIn Button Style</dt> 
    <script type="text/javascript">moveProgressBar('71.4');</script> 
    <dd class="example passed"><span class="passed_spec_name">should have accurate styling</span><span class='duration'>3.77360s</span></dd> 
    </dl> 
</div> 
<div id="div_group_7" class="example_group passed"> 
    <dl style="margin-left: 15px;"> 
    <dt id="example_group_7" class="passed">Ark header Topbar Style</dt> 
    <script type="text/javascript">moveProgressBar('85.7');</script> 
    <dd class="example passed"><span class="passed_spec_name">should have accurate styling</span><span class='duration'>2.78883s</span></dd> 
    </dl> 
</div> 
<div id="div_group_8" class="example_group passed"> 
    <dl style="margin-left: 15px;"> 
    <dt id="example_group_8" class="passed">Post Sign-In Style</dt> 
    <script type="text/javascript">moveProgressBar('100.0');</script> 
    <dd class="example passed"><span class="passed_spec_name">should have accurate styling</span><span class='duration'>17.62036s</span></dd> 
    </dl> 
</div> 
<script type="text/javascript">document.getElementById('duration').innerHTML = "Finished in <strong>38.83569 seconds</strong>";</script> 
<script type="text/javascript">document.getElementById('totals').innerHTML = "7 examples, 0 failures";</script> 
</div> 
</div> 
</body> 
</html> 

當我嘗試在Mac OSX上的終端相同的命令,它的工作原理沒有問題...

這是我得到時錯誤我嘗試從內紅寶石運行命令:

sed: 2: "/^<div class="results"> ...": undefined label 'ody>/p' 

回答

5

紅寶石執行命令前,用一個簡單的/更換\/序列。所以你的sed腳本毀了。嘗試使用雙反斜槓(\\/)。

+0

謝謝!修好了!非常感激! – sambehera