首页 > 解决方案 > 捕获包含模式正则表达式的每个单词

问题描述

我正在尝试编写一个 sed 脚本来查找包含特定模式的每个单词,然后将所有包含该模式的单词添加到前面。例如:

foobarbaz barfoobaz barbazfoo barbaz

可能会变成:

quxfoobarbaz quxbarfoobaz quxbarbazfoo barbaz

我了解捕获组和反向引用的基础知识,但我仍然遇到麻烦。具体来说,我无法让它分别捕获每个完整的单词。

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

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

标签: regexsed

解决方案


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

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

推荐阅读