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

Extracting whole string between two words with special characters using sed

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

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

我想return所有学生的名字和他们的ID,输出应该是:

20456712 Alin Smith

.....

如何使用 sed/grep 来实现?

我尝试了很多方法来获取 <tr><td></td><td> 之间的内容,但由于我认为的特殊字符,没有任何效果。

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

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

你可以试试这个正则表达式:

<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>

这也应该能帮到你:

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

View test on the command line