首页 > 解决方案 > sed 命令处理输入流并转换每个出现的单词

问题描述

我需要有关我的代码的帮助。我需要编写一个 sed 命令来处理输入流并将每个出现的单词“page”后面跟一个数字转换为表单的 HTML 超链接,其中 NNN 是页码。

例如:

See page 107

应替换为:

See <a href="#p107">page 107</a>

代码应符合 POSIX:

sed -r 's/________/_______/g'

标签: regexbashsed

解决方案


您可以使用这个使用 POSIX 表示法的正则表达式,

(page[[:space:]]+([[:digit:]]+))

并用这个替换它,

<a href="#p\2">\1</a>

试试这个示例命令,

echo "See page 107" | sed -r 's~(page[[:space:]]+([[:digit:]]+))~<a href="#p\2">\1</a>~g'

或者使用 -E 而不是 -r(对于 OS X)

echo "See page 107" | sed -E 's~(page[[:space:]]+([[:digit:]]+))~<a href="#p\2">\1</a>~g'

这给出了这个输出,

See <a href="#p107">page 107</a>

推荐阅读