Sed将键值对中的第一个字母大写

时间:2017-01-12 20:09:53

标签: bash sed find

我正在处理我的卡拉OK文件,我看到很多非大写字样。

.txt个文件被构造为一个键值对,我想知道如何将每个值字的第一个字母大写。

示例txt

#TITLE:fire and Water
#ARTIST:Some band
#CREATOR:yunho
#LANGUAGE:Korean
#EDITION:UAS
#MP3:2NE1 - Fire.mp3
#COVER:2NE1 - Fire.jpg
#VIDEO:2NE1 - Fire.avi
#VIDEOGAP:11.6
#BPM:595
#GAP:3860
F -4 4 16  I
F 2 4 16  go
F 8 6 16  by
F 16 4 16  the
F 22 6 16  name
F 30 4 16  of
F 36 10 16  C
F 46 10 16 L
F 58 6 16  of
F 66 5 16  2
F 71 3 16 N
F 74 4 16 E
F 78 18 16 1

我想将关键词TITLEARTISTSLANGUAGEEDITION

后的字词大写

所以对于示例txt

#TITLE:**F**ire **A**nd **W**ater
#ARTIST:**S**ome **B**and
#CREATOR:yunho
#LANGUAGE:**K**orean
#EDITION:**U**AS
#MP3:2NE1 - Fire.mp3
#COVER:2NE1 - Fire.jpg
#VIDEO:2NE1 - Fire.avi
#VIDEOGAP:11.6
#BPM:595
#GAP:3860
F -4 4 16  I
F 2 4 16  go
F 8 6 16  by
F 16 4 16  the
F 22 6 16  name
F 30 4 16  of
F 36 10 16  C
F 46 10 16 L
F 58 6 16  of
F 66 5 16  2
F 71 3 16 N
F 74 4 16 E
F 78 18 16 1

另一件事是我在指定的目录中加载了这些txt的文件。我想从父递归中为所有* .txt文件运行程序

示例目录:

Library/Some Band/Some Band - Some Song/some txt file.txt
Library/Some Band2/Some Band2 - Some Song/sometxtfile.txt
Library/Some Band3/Some Band3 - Some Song/some3333 txt file.txt

我试过find . -name '*.txt' -exec sed -i command {} + 但是我被困在搜索上并用sed替换......有人在乎帮助我吗?

1 个答案:

答案 0 :(得分:1)

您可以使用此gnu-sed命令将匹配行的起始字母大写:

sed -E '/^#(TITLE|ARTIST|LANGUAGE|EDITION):/s/\b([a-z])/\u\1/g' file

#TITLE:Fire And Water
#ARTIST:Some Band
#CREATOR:yunho
#LANGUAGE:Korean
#EDITION:UAS
#MP3:2NE1 - Fire.mp3
#COVER:2NE1 - Fire.jpg
#VIDEO:2NE1 - Fire.avi
#VIDEOGAP:11.6
#BPM:595
#GAP:3860
F -4 4 16  I
F 2 4 16  go
F 8 6 16  by
F 16 4 16  the
F 22 6 16  name
F 30 4 16  of
F 36 10 16  C
F 46 10 16 L
F 58 6 16  of
F 66 5 16  2
F 71 3 16 N
F 74 4 16 E
F 78 18 16

使用find + sed命令:

find . -name '*.txt' -exec \
sed -E -i '/^#(TITLE|ARTIST|LANGUAGE|EDITION):/s/\b([a-z])/\u\1/g' {} +