用sed括号来表示每个单词的第三个字符

我正在尝试使用sed在文本文件中将每个单词的第三个字符加括号。 我试过操纵:

 sed 's/\(\b[AZ]\)/\(\1\)/g' filename 

这就是我所需要的,除了第一个字符,而不是第三个。

它给了我:“欢迎来到怪人的东西”=>“(W)elcome(T)o(T)he(G)eek(S)凝灰岩”

我想要的是:“欢迎来到怪人的东西”=>“我们(l)来到Th(e)Ge(e)k St(u)ff”

我怎样才能括住每个单词的第三个字?

这个sed命令必须把每个第三个字符放在括号内的一个单词中。

 $ echo 'Welcome To The Geek Stuff' | sed 's/\b\([AZ][az]\)\([az]\)/\1(\2)/g' We(l)come To Th(e) Ge(e)k St(u)ff $ echo 'Welcome To The Geek Stuff' | sed 's/\b\([az][az]\)\([az]\)/\1(\2)/gi' We(l)come To Th(e) Ge(e)k St(u)ff 

添加i修改器,以便不区分大小写的匹配。

这是一个awk版本:

 cat file Hi, this is a test with some data. 

 awk '{for (i=1;i<=NF;i++) {split($i,a,"");if (a[3]~/[[:alpha:]]/) $i=substr($i,1,2)"("a[3]")"substr($i,4)}}1' file Hi, th(i)s is a te(s)t wi(t)h so(m)e da(t)a. 

它测试该单词中的第三个字母是否是字母字符,
如果是的话,用()围绕第三个字符重新创建单词。

这可能适用于你(GNU sed):

 sed 's/\b\(.\B.\)\B\(.\)/\1(\2)/g' file 

这将从字边界开始查找第二个非字边界,并用parens包围以下字符。