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

时间:2018-05-25 01:39:54

标签: regex sed

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

2 个答案:

答案 0 :(得分:0)

您可以使用非空格字符_remap,如下所示:

listen tcpProxy 0.0.0.0:7000 
    mode tcp 
    balance source
    server tcp1 ip1:port check maxconn 10000
    server tcp2 ip2:port check maxconn 10000

这将匹配包含\S的字词。替换字符串sed 's/\S*foo\S*/qux&/g' <<< "foobarbaz barfoobaz barbazfoo barbaz" 将使用foo添加每个匹配的模式。输出:

qux&

答案 1 :(得分:0)

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

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