例如,我的src.tex是
SectionType * p = NULL;
我希望它改为
section_type * p = NULL;
我想要做的只是更改 SectionType ,但仍保持 NULL 不变,我使用 y / [AZ] / [az] ,但这会改变所有的界限。
我的sed不支持\ L,\ l,\ U和\ u函数,它的版本是3. *并且在FSF下分发,而不是GNU,可能是GNU适用于这个函数,但当时我可以不采用GNU,因为我在msys工作,没有GNU包。
有没有解决办法?
答案 0 :(得分:1)
来自here
将CamelCase或camelCase转换为camel_case:
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;
答案 1 :(得分:1)
这应该无需安装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
我的sed
版本不会y/[A-Z]/[a-z]/
,它需要明确包含每个字符,这就是我使用变量的原因。我创建它们的方式取决于只有一些shell(如Bash和ksh)具有的功能。如果sed
支持,您可以执行简单的分配或使用范围。
如果您的sed
版本非常挑剔,则可能需要-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