还是替换大小写字母的问题,这是我整理博客的时候遇到的一点小问题
sed -i 用来改变文本内容
root@localhost ding]# echo ding xue | sed -r 's/([^ ]+)/\u&/g'
Ding Xue
[root@localhost ding]#
这是替换一个字符串,如果我们要替换一个文本中的内容怎么办呢?
例如
[root@localhost ding]# cat 111
ding xue
dingxue
ding da xue
[root@localhost ding]#
如果我们把这个文本中的首字母变成大写,怎么办呢,是这样吗?例如:
[root@localhost kkk]# sed -ir 's/([^ ]+)/\u&/g' 111
[root@localhost kkk]# cat 111
ding xue
dingxue
ding da xue
[root@localhost kkk]# ls
111 111r
[root@localhost kkk]#
看结果,并没有改过来,我们ls 一下,发现多了个111r,这是怎么回事呢?
其实这是sed 的一个小bug ,当我们想改变一个文本的时候sed -i如果和rn写在一起就会出错,我们看下111r的内容。也没有改变过来,如果写在一起,sed 就默认把i后面的内容当作备份的后缀。
root@localhost kkk]# cat 111r
ding xue
dingxue
ding da xue
[root@localhost kkk]#
如果想真正改变文件内容,我们可以这么做。这样就改过来了。
[root@localhost kkk]# sed -r 's/([^ ]+)/\u&/g' -i 111
[root@localhost kkk]# cat 111
Ding Xue
Dingxue
Ding Da Xue
[root@localhost kkk]#
本文转自 大雪儿 51CTO博客,原文链接:http://blog.51cto.com/dingxue/1970090,如需转载请自行联系原作者