用sed中的*替换句子中检测到的部分

时间:2018-08-08 11:11:13

标签: regex sed

locale::global(gen("pl_PL.UTF-8"));

这是用于从给定文本中提取单词$ echo "name=hello 123" | sed 's/.*name=\(.*\)\s.*/\1/' (=和空白之间的字符串)的命令。现在,我想使用sed将hello替换为hello

输出应为

*****

2 个答案:

答案 0 :(得分:0)

您只需要对匹配的部分执行替换-sed没有为此提供语法,您可以使用循环来解决。

$ # tested on GNU sed, syntax might vary for other implementations
$ echo 'name=foo 123' | sed -E ':a s/(name=\**)[a-z]/\1*/; ta'
name=*** 123
$ echo 'name=hello 123' | sed -E ':a s/(name=\**)[a-z]/\1*/; ta'
name=***** 123

或使用perl允许在替换部分使用代码

$ echo 'name=foo 123' | perl -pe 's/name=\K[^ ]+/$&=~s|.|*|gr/e'
name=*** 123
$ echo 'name=hello 123' | perl -pe 's/name=\K[^ ]+/$&=~s|.|*|gr/e'
name=***** 123
$ # or construct a string based on length of matched portion
$ echo 'name=hello 123' | perl -pe 's/name=\K[^ ]+/"*" x length($&)/e'
name=***** 123

答案 1 :(得分:0)

使用sed:

echo "name=hello" | sed 's/\(name\)=\(.\+\)/\1=*****/

如果要用*替换每个字符,请参阅Sundeep的回复。