我最近一直在研究一些简单的bash
脚本,它解析来自网页的特定数据。我使用tr '\r\n' ' ' <file1.txt >file2.txt
来确保从页面中提取的所有数据都存储在一行file1.txt
中。因此,我需要匹配此行中<th>...</th>
个标记之间的所有字符串,然后将其删除或替换为' '
符号。
所以这里有一些expamle代码:
<td>Abaktal hm</td> </tr> <tr> <th>Package</th> <td>flm 10x400 mg</td> <th>Indesit</th>
我使用了sed
并尝试了类似
sed -i 's/\<th\>.*?\<\/th\>/ /g' output.txt
但它没有用。我认为问题在于?
符号。它适用于正则表达式中的?
符号,但可能不在bash
中。
答案 0 :(得分:4)
虽然我同意sputnick和其他人的意见,但你当前问题的答案是:
sed -ir 's/<th>[^<]+<\/th>//g'
这对你的样本数据很有用。
答案 1 :(得分:0)
你的尝试似乎是错误的。
您无法使用HTML
或XML
,Bash
或{{等实用程序来实际解析基于标记的标记语言,例如grep
和sed
1}}。如果您只想转储/呈现cut
,请参阅HTML
,(links|links2|lynx|w3m) -dump
,html2text
。要解析数据,请参阅vilistextum
或了解tidy+(xmlstarlet|xmllint|xmlgawk|xpath|xml2)
。
见
答案 2 :(得分:0)
<td>
Abaktal hm
</td>
<th>
Package
</th>
<td>
flm 10x400 mg</td>
<th>
Indesit
</th>
如果您有这种类型的输入,则以下命令将起作用
sed -n&#39; // {p; :一个; N; /&LT; /第&GT;!/ BA;小号/.* \ n //}; P&#39; output.txt的
它将删除
之间的内容 <th>...</th> tags
了解更多信息 removing lines between two patterns (not inclusive) with sed