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