【发布时间】:2012-09-29 20:50:41
【问题描述】:
我在使用 sed 时遇到了一些问题。什么是仅提取模式的正确方法?
例如以下返回world,我希望它只返回w
echo "hello world" | sed -n 's|hello \(w\)|\1|p'
【问题讨论】:
-
您的模式与
hello world中的hello w匹配。然后只有那个匹配被替换为w。
标签: sed
我在使用 sed 时遇到了一些问题。什么是仅提取模式的正确方法?
例如以下返回world,我希望它只返回w
echo "hello world" | sed -n 's|hello \(w\)|\1|p'
【问题讨论】:
hello world 中的hello w 匹配。然后只有那个匹配被替换为w。
标签: sed
你可以更好地使用这种方式。
回显“你好世界”| sed -r 's/.+(w).*/\1/'
这将只提取 w 字符。
-r 选项是扩展的正则表达式。所以我们不使用转义“\”特殊字符。
.匹配任何单个字符。 * 星号将匹配零次或多次出现。
+ plus 将匹配一个或多个匹配项。
() 这是使用它的分组方法,您可以取回参考。
s 用于替代方法。
【讨论】:
-r 被 gnu sed 识别,但有很多sed 不接受该选项。
您忘记匹配和替换(删除)w 之后的文本:
echo "hello world" | sed -n 's|hello \(w\).*|\1|p'
【讨论】:
sed 命令如果匹配任何字符串,如果只匹配第一个字符中的第二个单词
sed 's/([a-z].*) ([a-z]).*/\2/' 输入文件
【讨论】: