0

例如,我的 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 包。

有什么办法可以得到吗?

4

2 回答 2

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
于 2010-11-09T04:58:50.340 回答
1

这里

将 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;
于 2010-11-09T03:22:55.860 回答