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

问题描述 投票:0回答:2

我正在尝试编写一个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

regex sed
2个回答
0
投票

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

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

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

quxfoobarbaz quxbarfoobaz quxbarbazfoo barbaz

0
投票

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

echo "foobarbaz barfoobaz barbazfoo barbaz" | sed 's/\([^ ]*foo[^ ]*\)/qux\1/g'
© www.soinside.com 2019 - 2024. All rights reserved.