使用sed获取两个字符串之间的值?

时间:2011-05-18 11:29:19

标签: regex linux bash sed

我在一行上有以下数据:

<a href="#page-metadata-start" class="assistive">Go to start of metadata</a>
<div id="page-metadata-end" class="assistive"></div>

        <fieldset class="hidden parameters">
                        <input type="hidden" title="browsePageTreeMode" value="view">
        </fieldset>

        <div class="wiki-content">
           <p>(openissues)81(/openissues)</p><p>(assignstoday)0(/assignstoday)</p><p>(assignsweek)2(/assignsweek)</p><p>(replyissues)6(/replyissues)</p><p>(wrapissues)26(/wrapissues)</p>
        </div>

我想获取“openissues”的值,例如,但我无法弄清楚要正确检索它。我尝试的其中一件事是以下命令:

sed -n '/(assignstoday)/,/(\/assignstoday)/p' ~/test.txt

任何帮助?

2 个答案:

答案 0 :(得分:3)

sed 's/.*(openissues)\(.*\)(\/openissues).*/\1/' test.txt

快速破解可能符合您编辑的要求:

sed -n '/openissues/p' test.txt | sed  's/.*(openissues)\(.*\)(\/openissues).*/\1/'

但是在解析HTML时,正则表达式真的不是一种方法。

答案 1 :(得分:1)

我试试

VALUE=openissues
sed  's@.*('"$VALUE"')\([^(]\+\).*@\1@'

即,使用该内容替换除搜索内容之外的所有内容。

编辑:现在我看到尼尔的回答,实际上是一样的,接受他的回答。我留下我的答案来定制你想要提取的值。