sed -n s / pattern / \ 1 / p打印是匹配还是不匹配?

时间:2011-07-04 20:41:32

标签: regex bash sed

我想使用这种模式检索4chan线程的板名:

echo $(cat ~/Desktop/test.html | sed -n "s/<title>\(.*\) - />\1</p")

test.html包含:

<link rel="shortcut icon" href="http://static.4chan.org/image/favicon.ico" /><link rel="stylesheet" type="text/css" href="http://static.4chan.org/css/yotsuba.9.css" title="Yotsuba"><link rel="alternate stylesheet" type="text/css" href="http://static.4chan.org/css/yotsublue.9.css" title="Yotsuba B"><link rel="alternate stylesheet" type="text/css" href="http://static.4chan.org/css/futaba.9.css" title="Futaba"><link rel="alternate stylesheet" type="text/css" href="http://static.4chan.org/css/burichan.9.css" title="Burichan"><title>/b/ - Random</title>

我想匹配/ b /,而是只删除“<title>”和“-”,如下所示:

<link rel="shortcut icon" href="http://static.4chan.org/image/favicon.ico" /><link rel="stylesheet" type="text/css" href="http://static.4chan.org/css/yotsuba.9.css" title="Yotsuba"><link rel="alternate stylesheet" type="text/css" href="http://static.4chan.org/css/yotsublue.9.css" title="Yotsuba B"><link rel="alternate stylesheet" type="text/css" href="http://static.4chan.org/css/futaba.9.css" title="Futaba"><link rel="alternate stylesheet" type="text/css" href="http://static.4chan.org/css/burichan.9.css" title="Burichan">>/b/<Random</title>

为什么?

2 个答案:

答案 0 :(得分:1)

因为你只是告诉它替换。如果您想从开头到结尾删除,则需要使用^$来锚定结尾,并匹配其间的所有字符。

答案 1 :(得分:1)

这样的事情:

sed -n "s/.*<title>\([^<>]*\) - .*/\1/p" ~/Desktop/test.html

你的问题是你的正则表达式与字符串的开头不匹配(在我的情况下。*执行此操作“和字符串结尾(在我的情况下,它再次是”。*“)