我刚开始学习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计算机科学中选择中选择。我做错了什么?
答案 0 :(得分:1)
如果您只需要在标签之间提取字符串,这意味着您需要删除标签,使它们之间的字符串保持不变。正确?
sed 's/<[^>]*>//g'
它用空字符串(无)替换(所有出现的)标记(“&lt;”下一个“&lt;”所有内容)。文字将保留。
答案 1 :(得分:0)
在sed中,s
命令有一个g
标志,用于对同一行上的所有模式事件进行操作。
s/>\([^<]*\)</\1/pg
可能就够了。