我正在尝试使用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包围以下字符。