使用sed在特殊字符的两个单词之间提取整个字符串

时间:2016-03-28 09:21:32

标签: regex shell sed grep special-characters

我有一个文件,每行格式为:

<tr><td>20456712 </td><td>Alin Smith </td><td.....(and so on).

我想要返回所有学生姓名和他们的ID在行中,输出应该是:

20456712 Alin Smith

.....

我怎么能用sed / grep做到?。

我已尝试过许多方法来解决<tr><td></td><td>之间的问题,但由于我认为的特殊字符,没有任何效果。

我已经尝试了几天没有结果。

我试过=&gt; sed -r 's/.*[<]+tr+[>]+[<]+td+[>](\S+).* <\/td><td>(\S+).*/\1 \2/',但它只给了我ID +名字:20456712 Alin

2 个答案:

答案 0 :(得分:1)

你可以试试这个RegEx:

<tr><td>([\d\s]+)<\/td><td>([\w\s]+)<\/td>

所有数据都将存储在第1组(ID)和第2组(全名)中。你可以在演示中看到这一点,将鼠标悬停在匹配上并对两组中的数据进行划分

Live Demo on RegExr

工作原理:

<tr>         # Opening <tr>
<td>         # Opening <td>
([\d\s]+)    # ID
<\/td>       # Closing </td>
<td>         # Opening <td>
([\w\s]+)    # Full Name
<\/td>       # Closing </td>

答案 1 :(得分:0)

这也应该可以帮到你:

sed 's/.*\([0-9]\{8\}\) <\/td><td>\([^<]*\) .*/\1 \2/'

View test on the command line