【问题标题】:sed extract only patternsed 仅提取模式
【发布时间】: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


【解决方案1】:

你可以更好地使用这种方式。

回显“你好世界”| sed -r 's/.+(w).*/\1/'

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

【讨论】:

  • -r 被 gnu sed 识别,但有很多sed 不接受该选项。
【解决方案2】:

您忘记匹配和替换(删除)w 之后的文本:

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

【讨论】:

    【解决方案3】:

    sed 命令如果匹配任何字符串,如果只匹配第一个字符中的第二个单词

    sed 's/([a-z].*) ([a-z]).*/\2/' 输入文件

    【讨论】:

      猜你喜欢
      • 2012-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-08
      • 2022-11-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多