捕获包含模式正则表达式的每个单词

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了捕获包含模式正则表达式的每个单词相关的知识,希望对你有一定的参考价值。

我正在尝试编写一个sed脚本,找到包含某个模式的每个单词,然后预先包含该模式的所有单词。例如:

foobarbaz barfoobaz barbazfoo barbaz

可能变成:

quxfoobarbaz quxbarfoobaz quxbarbazfoo barbaz

我理解捕获组和backrefrence的基础知识,但我仍然遇到麻烦。具体来说,我无法得到它,以便它分别捕获每个单词。

s/\(.*\)men\(.*\)/ not just the \1men\2, but the \1women\2 and \1children\2 too /

我尝试使用\s,因为许多网站推荐的空白,但sed将\s视为单独的字符\s

答案

你可以使用非空格字符\S如下:

sed 's/\S*foo\S*/qux&/g' <<< "foobarbaz barfoobaz barbazfoo barbaz"

这将匹配包含foo的单词。替换字符串qux&将使用qux添加每个匹配的模式。输出:

quxfoobarbaz quxbarfoobaz quxbarbazfoo barbaz
另一答案

如果每个单词中没有空格,它工作正常。

echo "foobarbaz barfoobaz barbazfoo barbaz" | sed 's/\([^ ]*foo[^ ]*\)/qux\1/g'

以上是关于捕获包含模式正则表达式的每个单词的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式之补获性分组与非补获性分组

用于获取仅包含模式列表中单词的字符串的正则表达式?

如何构建一个正则表达式来捕获由单个空格分隔的单词?

正则表达式入门环视

用于在 = 和 ; 之间捕获单词的正则表达式

构建正则表达式模式以适应所有这些单词