【问题标题】:Sed capitalize first letter of word in key-value pairSed 将键值对中单词的首字母大写
【发布时间】:2017-05-28 02:02:55
【问题描述】:

我目前正在处理我的卡拉 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 替换...有人愿意帮助我吗?

【问题讨论】:

    标签: bash sed find


    【解决方案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' {} +
    

    【讨论】:

    • hmmm 我是不是做错了什么?:sed: -e expression #1, char 54: invalid reference \1 on s' 命令的 RHS` ?
    • 我回到这个问题。有时在标题中有一个',例如Queen 的Don't Stop Me Now。现在它也将t 中的Don't 大写。结果:Don'T Stop Me Now
    • 这使情况变得更糟; I Don't want To miss A Thing 结果为 I Don't Want To MisS‌​ A Thing 在尝试删除 S Of Miss 时注意字符(我不得不按三次退格键)
    • 哦好吧试试:sed -E '/^#(TITLE|ARTIST|LANGUAGE|EDITION):/s/([: ])([a-z])/\1\u\2/g' file
    • 抱歉,试试这个:sed -E "s/'([A-Z])/'\l\1/g" file
    猜你喜欢
    • 2010-12-05
    • 2014-11-15
    • 2015-11-10
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 2012-11-11
    相关资源
    最近更新 更多