使用sed将每个单词的第三个字符括起来

时间:2015-03-27 22:23:10

标签: linux bash unix sed

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

sed 's/\(\b[A-Z]\)/\(\1\)/g' filename

这就是我需要的,除了它,它将第一个字符括起来,而不是第三个字符。

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

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

如何将每个单词的第三个字符括起来?

3 个答案:

答案 0 :(得分:6)

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

$ echo 'Welcome To The Geek Stuff' | sed 's/\b\([A-Z][a-z]\)\([a-z]\)/\1(\2)/g'
We(l)come To Th(e) Ge(e)k St(u)ff

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

按顺序添加i修饰符以执行不区分大小写的匹配。

答案 1 :(得分:0)

以下是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.

测试单词中的第三个字母是否为字母字符,
如果是这样,请在第三个字符周围用()重新创建单词。

答案 2 :(得分:0)

这可能适合你(GNU sed):

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

这将从单词边界的开头查找第二个非单词边界,并用parens包围后面的字符。