以下内容来自http://bbs.chinaunix.net/thread-1189933-1-1.html
现有数据,每一行中各个段间的分隔为多个空格,如下
AAB BB CCC
A2B CB ABC
如何实现,转换成下面的格式
AAB|BB|CCC|
A2B|CB|ABC|
awk解法:
1.
[cocobear@cocobear ~]$ awk ‘BEGIN{OFS=”|”} {$1=$1;print}’ test.txt
AAB|BB|CCC
A2B|CB|ABC
结果最后少一个”|”
2.
[cocobear@cocobear ~]$ awk ‘{print $1”|”$2”|”$3”|”}’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|
3.
[cocobear@cocobear ~]$ awk -v OFS=’|’ ‘NF++’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|
sed解法:
1.
[cocobear@cocobear ~]$ sed ‘s/^ +//;s/ +/|/g;s/ *$/|/;’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|
2.
[cocobear@cocobear ~]$ sed ‘s/\s+//;s/\s+|$/|/g’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|
3.
[cocobear@cocobear ~]$ sed ‘s/^[[:blank:]]+//;s/[[:blank:]]+|$/|/g’ test.txt
AAB|BB|CCC|
A2B|CB|ABC|
如何把一行的第一个字母换成大写?
文件如下: test.txt
#-----------------------------#
This is line number 1
THIS IS Line Number 2
ThiS is Line Number THREE
this is line Number four
#-----------------------------#
解法:
sed ‘s/^(.)/\u\1/‘
sed ‘s/[a-z]/\u&/‘
& 指代替前面查找的关键字即[a-z] \1是指前面用(..)定义的第一个标签
Comments
cocobear: 表示匹配一个或者多个字符。
dream: sed ‘s/ \+/|/g’ 中\+是什么意思?
dream: 那 .* 不是也可以达到目的吗?