2014-09-21 165 views
2

这里的第一个字母是我想利用这些数据:使用sed来为每个字

molly w. bolt  334-78-5443 
walter q. bugg 984-49-0032 
noah p. way  887-12-0921 
kerry t. bricks 431-09-1239 
ping h. yu  109-32-9845 

这是迄今为止我已经写了大写的名字的第一个字母,包括剧本最初

h 
s/\(.\).*/\1/ 
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ 
G 
s/\(.\)\n\(.\)\(.*\)/\1\3/ 
/[a-z]/{ 
h 
s/\([A-Z][a-z]* \)\([a-z]\).*/\2/ 
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ 
G 
s/\(.\)\n\([A-Z][a-z]* \)\(.\)\(.*\)/\2\1\4/ 
} 
/[a-z]/{ 
h 
s/\([A-Z][a-z]* \)\([a-z]\).*/\2/ 
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/ 
G 
s/\(.\)\n\([A-Z][a-z]* \)\(.\)\(.*\)/\2\1\4/ 
} 

它给我:

MOLLY W. BOLT  334-78-544Molly 3. bolt  334-78-5443 
WALTER Q. BUGG 984-49-003Walter 2. bugg 984-49-0032 
NOAH P. WAY  887-12-092Noah 1. way  887-12-0921 
KERRY T. BRICKS 431-09-123Kerry 9. bricks 431-09-1239 
PING H. YU  109-32-984Ping 5. yu  109-32-9845 

我只想有:

Molly W. Bolt  334-78-544 
Walter Q. Bugg 984-49-003 
Noah P. Way  887-12-092 
Kerry T. Bricks 431-09-123 
Ping H. Yu  109-32-984 

我会改变什么?

回答

5

这个怎么样(GNU SED):

$ sed 's/\b[a-z]/\u&/g' myfile 
Molly W. Bolt  334-78-5443 
Walter Q. Bugg 984-49-0032 
Noah P. Way  887-12-0921 
Kerry T. Bricks 431-09-1239 
Ping H. Yu  109-32-9845 
3

(GNU)桑达又该用utf8太工程:

sed -E 's/[[:alpha:]]+/\u&/g' 
#or 
sed -E 's/\S+/\u&/g' 

或Perl

perl -pe 's/(\w+)/\u$1/g' 
  • 搜索“字串”\w+
  • 替换(替代)s///$1与大写第一个字符\u
  • 无处不在的线g

或简单

perl -pe 's/\S+/\u$&/g' 
  • 任何nonspaced串
  • 利用

perl -CSDA -pe 's/\S+/\u$&/g' 

utf8编码的文件太...,例如工作从

павел андреевич чехов 234 
γεοργε πατσασογλοθ 123 
čajka šumivá   345 

将打印

Павел Андреевич Чехов 234 
Γεοργε Πατσασογλοθ 123 
Čajka Šumivá   345 

用于在线文件编辑使用了下:

perl -i.bak -CSDA -pe 's/\S+/\u$&/g' some filenames .... 

将创建.bak(备份)文件。

如果你有bash 4。2+,只需要在变量转换,你可以使用:

for name in павел андреевич чехов γεοργε πατσασογλοθ čajka šumivá 
do 
    echo "${name^}" #capitalize the $name 
done 

打印

Павел 
Андреевич 
Чехов 
Γεοργε 
Πατσασογλοθ 
Čajka 
Šumivá 

此外,对于SED的解决方案,有什么没有按;吨知道\uhttps://stackoverflow.com/a/11804643/632407

+0

在哪里把-i做成这个内联,有趣的控制台与utf8并没有显示我应该是,与指挥输出到新的文件作品 – josifoski 2014-09-21 20:01:26

+1

@ josifoski编辑...(注:改变'-CS'到'-CSDA') - 每个IO和参数都是'utf8'。 – jm666 2014-09-21 20:08:41

1
sed 's/^/ /;s/ [aA]/ A/g;s/ [bB]/ B/g;s/ [cC]/ C/g;s/ [dD]/ D/g;s/ [eE]/ E/g;s/ [fF]/ F/g;s/ [gG]/ G/g;s/ [hH]/ H/g;s/ [iI]/ I/g;s/ [jJ]/ J/g;s/ [kK]/ K/g;s/ [lL]/ L/g;s/ [mM]/ M/g;s/ [nN]/ N/g;s/ [oO]/ O/g;s/ [pP]/ P/g;s/ [qQ]/ Q/g;s/ [rR]/ R/g;s/ [sS]/ S/g;s/ [tT]/ T/g;s/ [uU]/ U/g;s/ [vV]/ V/g;s/ [wW]/ W/g;s/ [xX]/ X/g;s/ [yY]/ Y/g;s/ [zZ]/ Z/g;s/^.//' YourFile 

POSIX(可没有GNU SED)版本上您的样品 作品但如果像{andrea,georges ...假设字是在一行的开始或空格字符这里经过。