sed任何全字搜索和替换

时间:2015-05-14 15:02:38

标签: linux sed

如何在输入文本中匹配任何整个单词,然后将其替换为replaceString。 例如。我希望sed命令匹配输入文本中的任何单词,并用" XXX"替换每个单词。

echo "bar embarrassment recommended" | sed "Please fill right answer here"

我想像这样输出

XXX XXX XXX

我是Linux新手。所以在这种情况下可能会有一些其他命令可以最好地工作。任何建议?

这个问题中单词的定义非常简单。它可以包含字母a-z或A-Z,下划线。任何两个单词都由一个空格分隔。

实施例

this is a sample text
This Is A Sample Text
this_ is_ a_ sample_ text_

4 个答案:

答案 0 :(得分:2)

编辑:

echo "Bar Embarrassment Recommended." | sed -r 's/\w+/XXX/g'

是你所追求的。在我最初阅读你的问题时,你需要简单地将一个完整的单词转换成3个X。

答案 1 :(得分:1)

matchew's helpful answer包含 GNU sed解决方案,这是合适的,因为您的问题已标记为

在评论中,您说您使用的是Mac(OS X),其中包含 BSD sed,其在许多方面表现不同。

POSIX兼容(因此跨平台)相当于matchew的命令

echo "Bar Embarrassment Recommended." | sed 's/[[:alnum:]_]\{1,\}/XXX/g'

但是,请注意这将匹配任何边界上的字词,而不仅仅是空格 ;即,与任何非单词字符相邻的单词字符将匹配,因此abc-de将变为XXX-XXX,例如。

答案 2 :(得分:0)

您可以使用awk。它用xxx

替换所有单词
echo "bar embarrassment recommended" | awk '{for (i=1;i<NF;i++) printf "xxx ";print "xxx"}' file
xxx xxx xxx

答案 3 :(得分:-1)

你可以像这样用词边界匹配任何整个单词:

 echo "bar embarrassment recommended" | sed 's/\b\S\+\b/XXX/g'