2012-09-29 36 views
1

我在sed上遇到了一些麻烦。什么是正确的方式来提取模式?
例如下面的回报world,我希望它返回只是wsed只提取图案

echo "hello world" | sed -n 's|hello \(w\)|\1|p'

+1

你的模式符合'hello world'中的'hello w'。只有那个匹配才会被替换为'w'。 – Gumbo

回答

2

你忘了匹配& REPLACE(删除)w后的文字:

echo "hello world" | sed -n 's|hello \(w\).*|\1|p' 
3

你可以更好的使用这条路。

回声“hello world”| sed -r's /.+(w)。*/\ 1 /'

这将只提取w字符。 -r选项是扩展正则表达式。所以我们不使用转义“\”特殊字符。
。匹配任何单个字符。 *星号将匹配零个或多个匹配项。 + plus将匹配一个或多个匹配项。 ()这是使用此分组方法,您可以取回引用。用来代替方法的是 。

+0

'-r'被gnu sed识别,但有很多'sed'不接受这个选项。 –

1

sed命令如果匹配任何字符串如果在第一个字符匹配只有第二字

SED的/([AZ]。*)([AZ])。*/\ 2 /'inputfile中