如何使用sed在分隔符之间提取字符?

时间:2011-10-07 08:28:11

标签: linux scripting sed

我刚开始学习sed。我想提取并打印>之间的字符。和<分隔符。这是我数据文件中的文字:

<span id="ctl00_ContentPlaceHolder1_lblRollNo">12029</span>

   <br /><b>Engineering & IT/Computer Science</b><br />

        <div id="ctl00_ContentPlaceHolder1_divEngITMerit">

                        <span id="ctl00_ContentPlaceHolder1_lblEngITSelListNo">3rd Provisional Selection List</span>

                <tr><td style='width: 200px' class='TblTRData'>IT/Computer Science/Software</td><td style='width: 150px'class='TblTRData'>7 (out of 471)</td><td style='width: 325px'class='TblTRData'>Selected in MS COMPUTER SCIENCE</td></tr>

                                Name:

                                <span id="ctl00_ContentPlaceHolder1_lblName">SIDRA SHAHID</span>

                                Father Name:

                                <span id="ctl00_ContentPlaceHolder1_lblFatherName">SHAHID RAFEEQ AHMAD</span>

我写了命令:

sed -n -e '/^[^>]*>\([^<]*\)<.*/s//\1/p' myfile.txt

问题是它正在返回某些&gt;之间的文本。 &LT ;.例如,它打印 12029 ,但未在在MS计算机科学中选择中选择。我做错了什么?

2 个答案:

答案 0 :(得分:1)

如果您只需要在标签之间提取字符串,这意味着您需要删除标签,使它们之间的字符串保持不变。正确?

sed 's/<[^>]*>//g'

它用空字符串(无)替换(所有出现的)标记(“&lt;”下一个“&lt;”所有内容)。文字将保留。

答案 1 :(得分:0)

在sed中,s命令有一个g标志,用于对同一行上的所有模式事件进行操作。

s/>\([^<]*\)</\1/pg

可能就够了。