我正在尝试使用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”
如何将每个单词的第三个字符括起来?
答案 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包围后面的字符。