这是一个奇怪的问题..
我有一个html标签之间的单词列表,每个标签用一行分隔,左边有一些空格,如下所示:
<td>word</td>
<td>anotherWord</td>
...
我想从列表中提取单词而不是标签,所以我使用:
temp=$(printf "%s" "$temp" | egrep '[....]')
只是为了澄清,“temp”是要搜索的输入。 (我在bash脚本中执行此操作,并将输入存储在变量temp中)。 “...”是一个字符列表,因为我试图提取的单词只使用某些字符。
每当grep找到匹配项时,它会输出单词以及两侧的html标记!这只发生在匹配中,因为我通过让regex参数变成乱码来测试它,比如'09680876' - 它在临时文件中没有匹配,而grep没有输出任何内容。
我还尝试使用我知道匹配的特定单词作为正则表达式参数,如下所示:
.... | egrep 'hanai')
我知道'hanai'在示例文本中是明确的匹配。这导致了grep输出
<td>hanai</td>
我完全难过,无法在线找到解决方案。非常感谢有人指出我正在犯的明显错误。
答案 0 :(得分:3)
根据a related question这里使用grep(和egrep)中的扩展和perl模式。你必须使用一个正则表达式,它返回只匹配的组(标签文本)......这样(未经测试):
grep -oP '<[a-zA-Z]+> \K\[^<]+' test.txt
上面的正则表达式只是返回标记的文本,作为匹配的组并拒绝任何打开的关闭标记
答案 1 :(得分:2)
默认情况下grep
(和egrep
)输出包含匹配模式的行。如果您只想使用匹配的模式,请使用-o
标记。
来自man egrep
:
-o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.