代码之家  ›  专栏  ›  技术社区  ›  coanor

如何使用sed在大小写之间转换字符

  •  0
  • coanor  · 技术社区  · 15 年前

    截面类型*p=空;

    我想换成

    截面类型*p=空;

    我只想改变 ,但仍然是 无效的 是/[A-Z]/[A-Z]

    我的sed不支持\L、\L、\U和\U函数,它的版本是3.*并且是在FSF下发布的,而不是GNU,这可能是GNU很好地使用这些函数,但是当时我不能采用GNU,因为我在msys中工作,而且没有GNU包。

    有什么解决办法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Brian Clements    15 年前

    从 here

    将camel case或CamelCase转换为CamelCase:

    sed -e 's/\([A-Z][a-z]\)/_\l\1/g' -e 's/^_\([a-z]\)/\1/g' file.txt

    输入:

    SectionType *p = NULL;
    sectionType *p = NULL;
    ABCSectionType *p = NULL;
    

    输出:

    section_type *p = NULL;
    section_type *p = NULL;
    ABC_section_type *p = NULL;
    
        2
  •  1
  •   Dennis Williamson    15 年前

    sed . 它只改变了行中第一个单词的大小写。

    upper=$(printf "%s" {A..Z})
    lower=$(printf "%s" {a..z})
    sed "s/ /\n/;h;s/[^\n]*\n//;x;s/\n.*//;y/$upper/$lower/;G;s/\n//" inputfile
    

    我的版本 塞德 y/[A-Z]/[a-z]/ ,它需要显式包含每个字符,这就是我使用变量的原因。我创建它们的方式取决于一个只有Bash和ksh这样的shell才有的特性。如果您的 支持它。

    如果你的版本 塞德 真的很挑剔 -e

    sed -e "s/ /\n/" -e "h" -e "s/[^\n]*\n//" -e "x" -e "s/\n.*//" -e "y/$upper/$lower/" -e "G" -e "s/\n//" inputfile